| 851 | } |
| 852 | |
| 853 | func ExampleTx_CopyFile() { |
| 854 | // Open the database. |
| 855 | db, err := bolt.Open(tempfile(), 0600, nil) |
| 856 | if err != nil { |
| 857 | log.Fatal(err) |
| 858 | } |
| 859 | defer os.Remove(db.Path()) |
| 860 | |
| 861 | // Create a bucket and a key. |
| 862 | if err := db.Update(func(tx *bolt.Tx) error { |
| 863 | b, err := tx.CreateBucket([]byte("widgets")) |
| 864 | if err != nil { |
| 865 | return err |
| 866 | } |
| 867 | if err := b.Put([]byte("foo"), []byte("bar")); err != nil { |
| 868 | return err |
| 869 | } |
| 870 | return nil |
| 871 | }); err != nil { |
| 872 | log.Fatal(err) |
| 873 | } |
| 874 | |
| 875 | // Copy the database to another file. |
| 876 | toFile := tempfile() |
| 877 | if err := db.View(func(tx *bolt.Tx) error { |
| 878 | return tx.CopyFile(toFile, 0666) |
| 879 | }); err != nil { |
| 880 | log.Fatal(err) |
| 881 | } |
| 882 | defer os.Remove(toFile) |
| 883 | |
| 884 | // Open the cloned database. |
| 885 | db2, err := bolt.Open(toFile, 0600, nil) |
| 886 | if err != nil { |
| 887 | log.Fatal(err) |
| 888 | } |
| 889 | |
| 890 | // Ensure that the key exists in the copy. |
| 891 | if err := db2.View(func(tx *bolt.Tx) error { |
| 892 | value := tx.Bucket([]byte("widgets")).Get([]byte("foo")) |
| 893 | fmt.Printf("The value for 'foo' in the clone is: %s\n", value) |
| 894 | return nil |
| 895 | }); err != nil { |
| 896 | log.Fatal(err) |
| 897 | } |
| 898 | |
| 899 | // Close database to release file lock. |
| 900 | if err := db.Close(); err != nil { |
| 901 | log.Fatal(err) |
| 902 | } |
| 903 | |
| 904 | if err := db2.Close(); err != nil { |
| 905 | log.Fatal(err) |
| 906 | } |
| 907 | |
| 908 | // Output: |
| 909 | // The value for 'foo' in the clone is: bar |
| 910 | } |