1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
|
# name: test/sql/attach/attach_storage_version.test
# description: Tests attaching database files with different block allocation sizes.
# group: [attach]
statement ok
PRAGMA enable_verification
statement ok
ATTACH '__TEST_DIR__/version_1_2_0.db' (STORAGE_VERSION 'v1.2.0');
# exposed through tags
query I
SELECT tags['storage_version'] FROM duckdb_databases() WHERE database_name='version_1_2_0'
----
v1.2.0+
statement ok
DETACH version_1_2_0
# cannot downgrade storage version
statement error
ATTACH '__TEST_DIR__/version_1_2_0.db' (STORAGE_VERSION 'v1.0.0');
----
The storage version of an existing database cannot be lowered
# unknown storage version
statement error
ATTACH '__TEST_DIR__/version_1_2_0.db' (STORAGE_VERSION 'non_existant');
----
not a known DuckDB version
# we can open it with the current version
statement ok
ATTACH '__TEST_DIR__/version_1_2_0.db' (STORAGE_VERSION 'v1.2.0');
query I
SELECT tags['storage_version'] FROM duckdb_databases() WHERE database_name='version_1_2_0'
----
v1.2.0+
statement ok
DETACH version_1_2_0
# we can also open it without specifying the version at this point
# the version will be loaded from the file
statement ok
ATTACH '__TEST_DIR__/version_1_2_0.db';
query I
SELECT tags['storage_version'] FROM duckdb_databases() WHERE database_name='version_1_2_0'
----
v1.2.0+
statement ok
DETACH version_1_2_0
statement ok
set storage_compatibility_version='v0.10.2'
# attach a database with the default compatibility version
statement ok
ATTACH '__TEST_DIR__/default_version.db';
statement ok
CREATE TABLE default_version.tbl(i VARCHAR);
# check the default compat version
query I
SELECT tags['storage_version'] FROM duckdb_databases() WHERE database_name='default_version'
----
v1.0.0+
statement ok
DETACH default_version
# upgrade the database
statement ok
ATTACH '__TEST_DIR__/default_version.db' (STORAGE_VERSION 'v1.2.0');
# we have upgraded the tag now
query I
SELECT tags['storage_version'] FROM duckdb_databases() WHERE database_name='default_version'
----
v1.2.0+
statement ok
SET force_compression = 'zstd';
statement ok
INSERT INTO default_version.tbl VALUES ('abcd'), ('efgh'), ('hello'), ('world'), (NULL);
statement ok
CHECKPOINT default_version
statement ok
DETACH default_version
# we can attach the database again (without specifying the default)
statement ok
ATTACH '__TEST_DIR__/default_version.db'
# the upgraded tag is stored in the database file
query I
SELECT tags['storage_version'] FROM duckdb_databases() WHERE database_name='default_version'
----
v1.2.0+
query I
FROM default_version.tbl
----
abcd
efgh
hello
world
NULL
statement ok
DETACH default_version
# we can also attach it by specifying v1.2.0 explicitly
statement ok
ATTACH '__TEST_DIR__/default_version.db' (STORAGE_VERSION 'v1.2.0')
query I
FROM default_version.tbl
----
abcd
efgh
hello
world
NULL
statement ok
DETACH default_version
# but not by specifying a lower version anymore at this point
statement error
ATTACH '__TEST_DIR__/default_version.db' (STORAGE_VERSION 'v1.0.0')
----
The storage version of an existing database cannot be lowered
# setting the storage_compatibility_version explicitly changes the default storage compatibility version when attaching
statement ok
SET storage_compatibility_version = 'v1.2.0'
statement ok
ATTACH '__TEST_DIR__/modified_default_setting.db';
query I
SELECT tags['storage_version'] FROM duckdb_databases() WHERE database_name='modified_default_setting'
----
v1.2.0+
|