CREATETABLE inhe (ee text, LIKE inhx) inherits (ctlb); INSERTINTO inhe VALUES ('ee-col1', 'ee-col2', DEFAULT, 'ee-col4'); SELECT * FROM inhe; /* Columns aa, bb, xx value NULL, ee */ SELECT * FROM inhx; /* Empty set since LIKE inherits structure only */ SELECT * FROM ctlb; /* Has ee entry */ SELECT * FROM ctla; /* Has ee entry */
CREATETABLE inhf (LIKE inhx, LIKE inhx); /* Throw error */
CREATETABLE inhf (LIKE inhx INCLUDING DEFAULTS INCLUDING CONSTRAINTS); INSERTINTO inhf DEFAULTVALUES; SELECT * FROM inhf; /* Single entry with value 'text' */
ALTERTABLE inhx addconstraint foo CHECK (xx = 'text'); ALTERTABLE inhx ADDPRIMARYKEY (xx); CREATETABLE inhg (LIKE inhx); /* Doesn't copy constraint */ INSERTINTO inhg VALUES ('foo'); DROPTABLE inhg; CREATETABLE inhg (x text, LIKE inhx INCLUDING CONSTRAINTS, y text); /* Copies constraints */ INSERTINTO inhg VALUES ('x', 'text', 'y'); /* Succeeds */ INSERTINTO inhg VALUES ('x', 'text', 'y'); /* Succeeds -- Unique constraints not copied */ INSERTINTO inhg VALUES ('x', 'foo', 'y'); /* fails due to constraint */ SELECT * FROM inhg; /* Two records with three columns in order x=x, xx=text, y=y */ DROPTABLE inhg;
CREATETABLE test_like_id_1 (a bigint GENERATED ALWAYS AS IDENTITY, b text);
\d test_like_id_1 INSERTINTO test_like_id_1 (b) VALUES ('b1'); SELECT * FROM test_like_id_1; CREATETABLE test_like_id_2 (LIKE test_like_id_1);
\d test_like_id_2 INSERTINTO test_like_id_2 (b) VALUES ('b2'); SELECT * FROM test_like_id_2; -- identity was not copied CREATETABLE test_like_id_3 (LIKE test_like_id_1 INCLUDING IDENTITY);
\d test_like_id_3 INSERTINTO test_like_id_3 (b) VALUES ('b3'); SELECT * FROM test_like_id_3; -- identity was copied and applied DROPTABLE test_like_id_1, test_like_id_2, test_like_id_3;
CREATETABLE test_like_gen_1 (a int, b int GENERATED ALWAYS AS (a * 2) STORED, c int GENERATED ALWAYS AS (a * 3) VIRTUAL);
\d test_like_gen_1 INSERTINTO test_like_gen_1 (a) VALUES (1); SELECT * FROM test_like_gen_1; CREATETABLE test_like_gen_2 (LIKE test_like_gen_1);
\d test_like_gen_2 INSERTINTO test_like_gen_2 (a) VALUES (1); SELECT * FROM test_like_gen_2; CREATETABLE test_like_gen_3 (LIKE test_like_gen_1 INCLUDING GENERATED);
\d test_like_gen_3 INSERTINTO test_like_gen_3 (a) VALUES (1); SELECT * FROM test_like_gen_3; DROPTABLE test_like_gen_1, test_like_gen_2, test_like_gen_3;
-- also test generated column with a "forward" reference (bug #16342) CREATETABLE test_like_4 (b intDEFAULT42,
c int GENERATED ALWAYS AS (a * 2) STORED,
a intCHECK (a > 0));
\d test_like_4 CREATETABLE test_like_4a (LIKE test_like_4); CREATETABLE test_like_4b (LIKE test_like_4 INCLUDING DEFAULTS); CREATETABLE test_like_4c (LIKE test_like_4 INCLUDING GENERATED); CREATETABLE test_like_4d (LIKE test_like_4 INCLUDING DEFAULTS INCLUDING GENERATED);
\d test_like_4a INSERTINTO test_like_4a (a) VALUES(11); SELECT a, b, c FROM test_like_4a;
\d test_like_4b INSERTINTO test_like_4b (a) VALUES(11); SELECT a, b, c FROM test_like_4b;
\d test_like_4c INSERTINTO test_like_4c (a) VALUES(11); SELECT a, b, c FROM test_like_4c;
\d test_like_4d INSERTINTO test_like_4d (a) VALUES(11); SELECT a, b, c FROM test_like_4d;
-- Test renumbering of Vars when combining LIKE with inheritance CREATETABLE test_like_5 (x point, y point, z point); CREATETABLE test_like_5x (p intCHECK (p > 0),
q int GENERATED ALWAYS AS (p * 2) STORED); CREATETABLE test_like_5c (LIKE test_like_4 INCLUDING ALL)
INHERITS (test_like_5, test_like_5x);
\d test_like_5c
-- Test updating of column numbers in statistics expressions (bug #18468) CREATETABLE test_like_6 (a int, c text, b text); CREATE STATISTICS ext_stat ON (a || b) FROM test_like_6; ALTERTABLE test_like_6 DROPCOLUMN c; CREATETABLE test_like_6c (LIKE test_like_6 INCLUDING ALL);
\d+ test_like_6c
CREATETABLE inhg (x text, LIKE inhx INCLUDING INDEXES, y text); /* copies indexes */ INSERTINTO inhg VALUES (5, 10); INSERTINTO inhg VALUES (20, 10); -- should fail DROPTABLE inhg; /* Multiple primary keys creation should fail */ CREATETABLE inhg (x text, LIKE inhx INCLUDING INDEXES, PRIMARYKEY(x)); /* fails */ CREATETABLE inhz (xx text DEFAULT'text', yy intUNIQUE); CREATEUNIQUEINDEX inhz_xx_idx on inhz (xx) WHERE xx <> 'test'; /* Ok to create multiple unique indexes */ CREATETABLE inhg (x text UNIQUE, LIKE inhz INCLUDING INDEXES); INSERTINTO inhg (xx, yy, x) VALUES ('test', 5, 10); INSERTINTO inhg (xx, yy, x) VALUES ('test', 10, 15); INSERTINTO inhg (xx, yy, x) VALUES ('foo', 10, 15); -- should fail DROPTABLE inhg; DROPTABLE inhz;
/* Use primary key imported by LIKE for self-referential FK constraint */ CREATETABLE inhz (x text REFERENCES inhz, LIKE inhx INCLUDING INDEXES);
\d inhz DROPTABLE inhz;
-- including storage and comments CREATETABLE ctlt1 (a text CHECK (length(a) > 2) ENFORCED PRIMARYKEY,
b text CHECK (length(b) > 100) NOT ENFORCED); ALTERTABLE ctlt1 ADDCONSTRAINT cc CHECK (length(b) > 100) NOT VALID; CREATEINDEX ctlt1_b_key ON ctlt1 (b); CREATEINDEX ctlt1_fnidx ON ctlt1 ((a || b)); CREATE STATISTICS ctlt1_a_b_stat ON a,b FROM ctlt1; CREATE STATISTICS ctlt1_expr_stat ON (a || b) FROM ctlt1;
COMMENT ON STATISTICS ctlt1_a_b_stat IS'ab stats';
COMMENT ON STATISTICS ctlt1_expr_stat IS'ab expr stats';
COMMENT ONCOLUMN ctlt1.a IS'A';
COMMENT ONCOLUMN ctlt1.b IS'B';
COMMENT ONCONSTRAINT ctlt1_a_check ON ctlt1 IS't1_a_check';
COMMENT ONINDEX ctlt1_pkey IS'index pkey';
COMMENT ONINDEX ctlt1_b_key IS'index b_key'; ALTERTABLE ctlt1 ALTERCOLUMN a SET STORAGE MAIN;
CREATETABLE ctlt2 (c text NOTNULL); ALTERTABLE ctlt2 ALTERCOLUMN c SET STORAGE EXTERNAL;
COMMENT ONCOLUMN ctlt2.c IS'C';
COMMENT ONCONSTRAINT ctlt2_c_not_null ON ctlt2 IS't2_c_not_null';
CREATETABLE ctlt3 (a text CHECK (length(a) < 5), c text CHECK (length(c) < 7)); ALTERTABLE ctlt3 ALTERCOLUMN c SET STORAGE EXTERNAL; ALTERTABLE ctlt3 ALTERCOLUMN a SET STORAGE MAIN; CREATEINDEX ctlt3_fnidx ON ctlt3 ((a || c));
COMMENT ONCOLUMN ctlt3.a IS'A3';
COMMENT ONCOLUMN ctlt3.c IS'C';
COMMENT ONCONSTRAINT ctlt3_a_check ON ctlt3 IS't3_a_check';
CREATETABLE ctlt4 (a text, c text); ALTERTABLE ctlt4 ALTERCOLUMN c SET STORAGE EXTERNAL;
CREATETABLE ctlt12_storage (LIKE ctlt1 INCLUDING STORAGE, LIKE ctlt2 INCLUDING STORAGE);
\d+ ctlt12_storage CREATETABLE ctlt12_comments (LIKE ctlt1 INCLUDING COMMENTS, LIKE ctlt2 INCLUDING COMMENTS);
\d+ ctlt12_comments SELECT conname, description FROM pg_description, pg_constraint c WHERE classoid = 'pg_constraint'::regclass AND objoid = c.oid AND c.conrelid = 'ctlt12_comments'::regclass; CREATETABLE ctlt1_inh (LIKE ctlt1 INCLUDING CONSTRAINTS INCLUDING COMMENTS) INHERITS (ctlt1);
\d+ ctlt1_inh SELECT description FROM pg_description, pg_constraint c WHERE classoid = 'pg_constraint'::regclass AND objoid = c.oid AND c.conrelid = 'ctlt1_inh'::regclass; CREATETABLE ctlt13_inh () INHERITS (ctlt1, ctlt3);
\d+ ctlt13_inh CREATETABLE ctlt13_like (LIKE ctlt3 INCLUDING CONSTRAINTS INCLUDING INDEXES INCLUDING COMMENTS INCLUDING STORAGE) INHERITS (ctlt1);
\d+ ctlt13_like SELECT description FROM pg_description, pg_constraint c WHERE classoid = 'pg_constraint'::regclass AND objoid = c.oid AND c.conrelid = 'ctlt13_like'::regclass;
CREATETABLE ctlt_all (LIKE ctlt1 INCLUDING ALL);
\d+ ctlt_all SELECT c.relname, objsubid, description FROM pg_description, pg_index i, pg_class c WHERE classoid = 'pg_class'::regclass AND objoid = i.indexrelid AND c.oid = i.indexrelid AND i.indrelid = 'ctlt_all'::regclass ORDERBY c.relname, objsubid; SELECT s.stxname, objsubid, description FROM pg_description, pg_statistic_ext s WHERE classoid = 'pg_statistic_ext'::regclass AND objoid = s.oid AND s.stxrelid = 'ctlt_all'::regclass ORDERBY s.stxname, objsubid;
-- Check that LIKE isn't confused by a system catalog of the same name CREATETABLE pg_attrdef (LIKE ctlt1 INCLUDING ALL);
\d+ public.pg_attrdef DROPTABLE public.pg_attrdef;
-- Check that LIKE isn't confused when new table masks the old, either
BEGIN; CREATESCHEMA ctl_schema; SET LOCAL search_path = ctl_schema, public; CREATETABLE ctlt1 (LIKE ctlt1 INCLUDING ALL);
\d+ ctlt1
ROLLBACK;
-- LIKE must respect NO INHERIT property of constraints CREATETABLE noinh_con_copy (a intCHECK (a > 0) NO INHERIT, b intnotnull,
c intnotnull no inherit);
COMMENT ONCONSTRAINT noinh_con_copy_b_not_null ON noinh_con_copy IS'not null b';
COMMENT ONCONSTRAINT noinh_con_copy_c_not_null ON noinh_con_copy IS'not null c no inherit';
CREATETABLE noinh_con_copy1 (LIKE noinh_con_copy INCLUDING CONSTRAINTS INCLUDING COMMENTS);
\d+ noinh_con_copy1
SELECT conname, description FROM pg_description, pg_constraint c WHERE classoid = 'pg_constraint'::regclass AND objoid = c.oid AND c.conrelid = 'noinh_con_copy1'::regclass ORDERBY conname COLLATE"C";
-- fail, as partitioned tables don't allow NO INHERIT constraints CREATETABLE noinh_con_copy1_parted (LIKE noinh_con_copy INCLUDING ALL)
PARTITION BY LIST (a);
CREATE VIEW ctlv1 ASSELECT * FROM ctlt4; CREATETABLE ctlt11 (LIKE ctlv1); CREATETABLE ctlt11a (LIKE ctlv1 INCLUDING ALL);
CREATE TYPE ctlty1 AS (a int, b text); CREATETABLE ctlt12 (LIKE ctlty1);
DROP SEQUENCE ctlseq1; DROP TYPE ctlty1; DROP VIEW ctlv1; DROPTABLEIFEXISTS ctlt4, ctlt10, ctlt11, ctlt11a, ctlt12;
-- -- CREATE FOREIGN TABLE LIKE -- CREATEFOREIGN DATA WRAPPER ctl_dummy; CREATE SERVER ctl_s0 FOREIGN DATA WRAPPER ctl_dummy;
CREATETABLE ctl_table(a intPRIMARYKEY,
b varchar COMPRESSION pglz,
c int GENERATED ALWAYS AS (a * 2) STORED,
d bigint GENERATED ALWAYS AS IDENTITY,
e intDEFAULT1);
CREATEINDEX ctl_table_a_key ON ctl_table(a);
COMMENT ONCOLUMN ctl_table.b IS'Column b'; CREATE STATISTICS ctl_table_stat ON a,b FROM ctl_table; ALTERTABLE ctl_table ADDCONSTRAINT foo CHECK (b = 'text'); ALTERTABLE ctl_table ALTERCOLUMN b SET STORAGE MAIN;
\d+ ctl_table
-- Test EXCLUDING ALL CREATEFOREIGNTABLE ctl_foreign_table1(LIKE ctl_table EXCLUDING ALL) SERVER ctl_s0;
\d+ ctl_foreign_table1 -- \d+ does not report the value of attcompression for a foreign table, so -- check separately. SELECT attname, attcompression FROM pg_attribute WHERE attrelid = 'ctl_foreign_table1'::regclass and attnum > 0ORDERBY attnum;
-- Test INCLUDING ALL -- INDEXES, IDENTITY, COMPRESSION, STORAGE are not copied. CREATEFOREIGNTABLE ctl_foreign_table2(LIKE ctl_table INCLUDING ALL) SERVER ctl_s0;
\d+ ctl_foreign_table2 -- \d+ does not report the value of attcompression for a foreign table, so -- check separately. SELECT attname, attcompression FROM pg_attribute WHERE attrelid = 'ctl_foreign_table2'::regclass and attnum > 0ORDERBY attnum;
-- LIKE ... INCLUDING STATISTICS with dropped columns in the parent, -- so stxkeys attnums are not contiguous. CREATETABLE ctl_stats3_parent (a int, b int, c int); ALTERTABLE ctl_stats3_parent DROPCOLUMN b; CREATE STATISTICS ctl_stats3_stat ON a, c FROM ctl_stats3_parent; CREATETABLE ctl_stats3_child (LIKE ctl_stats3_parent INCLUDING STATISTICS); CREATETABLE ctl_stats4_parent (a int, b int, c int, d int); ALTERTABLE ctl_stats4_parent DROPCOLUMN b; CREATE STATISTICS ctl_stats4_stat ON a, c FROM ctl_stats4_parent; CREATETABLE ctl_stats4_child (LIKE ctl_stats4_parent INCLUDING STATISTICS); SELECT s.stxrelid::regclass AS relation,
array_agg(a.attname ORDERBY u.ord) AS stats_columns FROM pg_statistic_ext s CROSSJOIN LATERAL
unnest(s.stxkeys::int2[]) WITH ORDINALITY AS u(attnum, ord) JOIN pg_attribute a ON a.attrelid = s.stxrelid AND a.attnum = u.attnum WHERE s.stxrelid IN ('ctl_stats3_child'::regclass, 'ctl_stats4_child'::regclass) GROUPBY s.stxrelid ORDERBY s.stxrelid::regclass::text; DROPTABLE ctl_stats3_parent; DROPTABLE ctl_stats3_child; DROPTABLE ctl_stats4_parent; DROPTABLE ctl_stats4_child;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.