| -- |
| -- Regression tests for schemas (namespaces) |
| -- |
| -- set the whitespace-only search_path to test that the |
| -- GUC list syntax is preserved during a schema creation |
| SELECT pg_catalog.set_config('search_path', ' ', false); |
| set_config |
| ------------ |
| |
| (1 row) |
| |
| CREATE SCHEMA test_ns_schema_1 |
| CREATE INDEX abc_a_idx ON abc (a) |
| CREATE VIEW abc_view AS |
| SELECT a+1 AS a, b+1 AS b FROM abc |
| CREATE TABLE abc ( |
| a serial, |
| b int UNIQUE |
| ) DISTRIBUTED BY (b); |
| -- verify that the correct search_path restored on abort |
| SET search_path to public; |
| BEGIN; |
| SET search_path to public, test_ns_schema_1; |
| CREATE SCHEMA test_ns_schema_2 |
| CREATE VIEW abc_view AS SELECT c FROM abc; |
| ERROR: column "c" does not exist |
| LINE 2: CREATE VIEW abc_view AS SELECT c FROM abc; |
| ^ |
| COMMIT; |
| SHOW search_path; |
| search_path |
| ------------- |
| public |
| (1 row) |
| |
| -- verify that the correct search_path preserved |
| -- after creating the schema and on commit |
| BEGIN; |
| SET search_path to public, test_ns_schema_1; |
| CREATE SCHEMA test_ns_schema_2 |
| CREATE VIEW abc_view AS SELECT a FROM abc; |
| SHOW search_path; |
| search_path |
| -------------------------- |
| public, test_ns_schema_1 |
| (1 row) |
| |
| COMMIT; |
| SHOW search_path; |
| search_path |
| -------------------------- |
| public, test_ns_schema_1 |
| (1 row) |
| |
| DROP SCHEMA test_ns_schema_2 CASCADE; |
| NOTICE: drop cascades to view test_ns_schema_2.abc_view |
| -- verify that the correct search_path restored on abort |
| SET search_path to public; |
| BEGIN; |
| SET search_path to public, test_ns_schema_1; |
| CREATE SCHEMA test_ns_schema_2 |
| CREATE VIEW abc_view AS SELECT c FROM abc; |
| ERROR: column "c" does not exist |
| LINE 2: CREATE VIEW abc_view AS SELECT c FROM abc; |
| ^ |
| COMMIT; |
| SHOW search_path; |
| search_path |
| ------------- |
| public |
| (1 row) |
| |
| -- verify that the correct search_path preserved |
| -- after creating the schema and on commit |
| BEGIN; |
| SET search_path to public, test_ns_schema_1; |
| CREATE SCHEMA test_ns_schema_2 |
| CREATE VIEW abc_view AS SELECT a FROM abc; |
| SHOW search_path; |
| search_path |
| -------------------------- |
| public, test_ns_schema_1 |
| (1 row) |
| |
| COMMIT; |
| SHOW search_path; |
| search_path |
| -------------------------- |
| public, test_ns_schema_1 |
| (1 row) |
| |
| DROP SCHEMA test_ns_schema_2 CASCADE; |
| NOTICE: drop cascades to view test_ns_schema_2.abc_view |
| -- verify that the objects were created |
| SELECT COUNT(*) FROM pg_class WHERE relnamespace = |
| (SELECT oid FROM pg_namespace WHERE nspname = 'test_ns_schema_1'); |
| count |
| ------- |
| 5 |
| (1 row) |
| |
| INSERT INTO test_ns_schema_1.abc DEFAULT VALUES; |
| INSERT INTO test_ns_schema_1.abc DEFAULT VALUES; |
| INSERT INTO test_ns_schema_1.abc DEFAULT VALUES; |
| SELECT * FROM test_ns_schema_1.abc; |
| a | b |
| ---+--- |
| 1 | |
| 2 | |
| 3 | |
| (3 rows) |
| |
| SELECT * FROM test_ns_schema_1.abc_view; |
| a | b |
| ---+--- |
| 2 | |
| 3 | |
| 4 | |
| (3 rows) |
| |
| ALTER SCHEMA test_ns_schema_1 RENAME TO test_ns_schema_renamed; |
| SELECT COUNT(*) FROM pg_class WHERE relnamespace = |
| (SELECT oid FROM pg_namespace WHERE nspname = 'test_ns_schema_1'); |
| count |
| ------- |
| 0 |
| (1 row) |
| |
| -- test IF NOT EXISTS cases |
| CREATE SCHEMA test_ns_schema_renamed; -- fail, already exists |
| ERROR: schema "test_ns_schema_renamed" already exists |
| CREATE SCHEMA IF NOT EXISTS test_ns_schema_renamed; -- ok with notice |
| NOTICE: schema "test_ns_schema_renamed" already exists, skipping |
| CREATE SCHEMA IF NOT EXISTS test_ns_schema_renamed -- fail, disallowed |
| CREATE TABLE abc ( |
| a serial, |
| b int UNIQUE |
| ); |
| ERROR: CREATE SCHEMA IF NOT EXISTS cannot include schema elements |
| LINE 2: CREATE TABLE abc ( |
| ^ |
| DROP SCHEMA test_ns_schema_renamed CASCADE; |
| NOTICE: drop cascades to 2 other objects |
| DETAIL: drop cascades to table test_ns_schema_renamed.abc |
| drop cascades to view test_ns_schema_renamed.abc_view |
| -- verify that the objects were dropped |
| SELECT COUNT(*) FROM pg_class WHERE relnamespace = |
| (SELECT oid FROM pg_namespace WHERE nspname = 'test_ns_schema_renamed'); |
| count |
| ------- |
| 0 |
| (1 row) |
| |