From: Bruce Momjian Date: Wed, 10 Sep 2014 20:54:40 +0000 (-0400) Subject: Issue a warning during the creation of hash indexes X-Git-Tag: REL9_5_ALPHA1~1492 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=84aa8ba128a08e6fdebb2497c7a79ebf18093e12;p=postgresql Issue a warning during the creation of hash indexes --- diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index fdfa6ca4f5..1afe02bd85 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -489,6 +489,10 @@ DefineIndex(Oid relationId, accessMethodId = HeapTupleGetOid(tuple); accessMethodForm = (Form_pg_am) GETSTRUCT(tuple); + if (strcmp(accessMethodName, "hash") == 0) + ereport(WARNING, + (errmsg("hash indexes are not WAL-logged so they are not crash-safe and cannot be used on streaming standbys"))); + if (stmt->unique && !accessMethodForm->amcanunique) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), diff --git a/src/test/regress/expected/create_index.out b/src/test/regress/expected/create_index.out index f6f5516321..e68f9c288d 100644 --- a/src/test/regress/expected/create_index.out +++ b/src/test/regress/expected/create_index.out @@ -2238,9 +2238,13 @@ DROP TABLE array_gin_test; -- HASH -- CREATE INDEX hash_i4_index ON hash_i4_heap USING hash (random int4_ops); +WARNING: hash indexes are not WAL-logged so they are not crash-safe and cannot be used on streaming standbys CREATE INDEX hash_name_index ON hash_name_heap USING hash (random name_ops); +WARNING: hash indexes are not WAL-logged so they are not crash-safe and cannot be used on streaming standbys CREATE INDEX hash_txt_index ON hash_txt_heap USING hash (random text_ops); +WARNING: hash indexes are not WAL-logged so they are not crash-safe and cannot be used on streaming standbys CREATE INDEX hash_f8_index ON hash_f8_heap USING hash (random float8_ops); +WARNING: hash indexes are not WAL-logged so they are not crash-safe and cannot be used on streaming standbys -- CREATE INDEX hash_ovfl_index ON hash_ovfl_heap USING hash (x int4_ops); -- -- Test functional index diff --git a/src/test/regress/expected/enum.out b/src/test/regress/expected/enum.out index 36826428a0..44f1c79848 100644 --- a/src/test/regress/expected/enum.out +++ b/src/test/regress/expected/enum.out @@ -383,6 +383,7 @@ DROP INDEX enumtest_btree; -- Hash index / opclass with the = operator -- CREATE INDEX enumtest_hash ON enumtest USING hash (col); +WARNING: hash indexes are not WAL-logged so they are not crash-safe and cannot be used on streaming standbys SELECT * FROM enumtest WHERE col = 'orange'; col -------- diff --git a/src/test/regress/expected/macaddr.out b/src/test/regress/expected/macaddr.out index 50d0369139..4c8dec0563 100644 --- a/src/test/regress/expected/macaddr.out +++ b/src/test/regress/expected/macaddr.out @@ -39,6 +39,7 @@ SELECT * FROM macaddr_data; CREATE INDEX macaddr_data_btree ON macaddr_data USING btree (b); CREATE INDEX macaddr_data_hash ON macaddr_data USING hash (b); +WARNING: hash indexes are not WAL-logged so they are not crash-safe and cannot be used on streaming standbys SELECT a, b, trunc(b) FROM macaddr_data ORDER BY 2, 1; a | b | trunc ----+-------------------+------------------- diff --git a/src/test/regress/expected/replica_identity.out b/src/test/regress/expected/replica_identity.out index 96dc98bf08..48426e8d92 100644 --- a/src/test/regress/expected/replica_identity.out +++ b/src/test/regress/expected/replica_identity.out @@ -11,6 +11,7 @@ CREATE INDEX test_replica_identity_keyab ON test_replica_identity (keya, keyb); CREATE UNIQUE INDEX test_replica_identity_keyab_key ON test_replica_identity (keya, keyb); CREATE UNIQUE INDEX test_replica_identity_nonkey ON test_replica_identity (keya, nonkey); CREATE INDEX test_replica_identity_hash ON test_replica_identity USING hash (nonkey); +WARNING: hash indexes are not WAL-logged so they are not crash-safe and cannot be used on streaming standbys CREATE UNIQUE INDEX test_replica_identity_expr ON test_replica_identity (keya, keyb, (3)); CREATE UNIQUE INDEX test_replica_identity_partial ON test_replica_identity (keya, keyb) WHERE keyb != '3'; -- default is 'd'/DEFAULT for user created tables diff --git a/src/test/regress/expected/uuid.out b/src/test/regress/expected/uuid.out index d907519918..4c4c092b35 100644 --- a/src/test/regress/expected/uuid.out +++ b/src/test/regress/expected/uuid.out @@ -114,6 +114,7 @@ SELECT COUNT(*) FROM guid1 WHERE guid_field >= '22222222-2222-2222-2222-22222222 -- btree and hash index creation test CREATE INDEX guid1_btree ON guid1 USING BTREE (guid_field); CREATE INDEX guid1_hash ON guid1 USING HASH (guid_field); +WARNING: hash indexes are not WAL-logged so they are not crash-safe and cannot be used on streaming standbys -- unique index test CREATE UNIQUE INDEX guid1_unique_BTREE ON guid1 USING BTREE (guid_field); -- should fail