-- -- 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 UNIQUE 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 ); -- 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)