@@ -39,12 +39,17 @@ INSERT INTO tbl select r['a']::int, r['b'] from duckdb.query($$ SELECT 11 a, 'de
3939INSERT INTO tbl select r['a']::int, r['b'] from duckdb.query($$ SELECT 21 a, 'ghi' b $$) r;
4040ERROR: no partition of relation "tbl" found for row
4141DETAIL: Partition key of the failing row contains (a) = (21).
42- SELECT * FROM tbl ORDER BY a LIMIT 5;
42+ SELECT * FROM tbl_p1 ORDER BY a;
43+ a | b
44+ ---+-----
45+ 1 | abc
46+ (1 row)
47+
48+ SELECT * FROM tbl_p2 ORDER BY a;
4349 a | b
4450----+-----
45- 1 | abc
4651 11 | def
47- (2 rows )
52+ (1 row )
4853
4954DROP TABLE tbl;
5055-- case: INSERT INTO TABLE (col1, col3)
@@ -101,3 +106,67 @@ SELECT * FROM tbl;
101106(4 rows)
102107
103108DROP TABLE tbl;
109+ CREATE TABLE tbl (a INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, b text);
110+ INSERT INTO tbl (b) SELECT 'foo' FROM generate_series(1, 2);
111+ INSERT INTO tbl (b) SELECT 'qux' FROM generate_series(1, 4);;
112+ SELECT * FROM tbl;
113+ a | b
114+ ---+-----
115+ 1 | foo
116+ 2 | foo
117+ 3 | qux
118+ 4 | qux
119+ 5 | qux
120+ 6 | qux
121+ (6 rows)
122+
123+ DROP TABLE tbl;
124+ CREATE TABLE tbl (a SERIAL PRIMARY KEY, b text);
125+ INSERT INTO tbl (b) SELECT 'foo' FROM generate_series(1, 2);
126+ INSERT INTO tbl (b) SELECT 'qux' FROM generate_series(1, 4);;
127+ SELECT * FROM tbl;
128+ a | b
129+ ---+-----
130+ 1 | foo
131+ 2 | foo
132+ 3 | qux
133+ 4 | qux
134+ 5 | qux
135+ 6 | qux
136+ (6 rows)
137+
138+ DROP TABLE tbl;
139+ -- case: ARRAY / JSON type
140+ CREATE TABLE tbl (a int, b text[], c jsonb);
141+ CREATE TABLE tbl1 (a int, b text[], c jsonb);
142+ INSERT INTO tbl (a, b, c) VALUES (1, ARRAY ['foo', 'bar'], '{"a": 1, "b": 2}');
143+ INSERT INTO tbl1 SELECT * FROM tbl;
144+ SELECT * FROM tbl1;
145+ a | b | c
146+ ---+-----------+------------------
147+ 1 | {foo,bar} | {"a": 1, "b": 2}
148+ (1 row)
149+
150+ DROP TABLE tbl, tbl1;
151+ -- case: UPDATE/DELETE should be blocked
152+ SET duckdb.log_pg_explain to on;
153+ CREATE TABLE tbl (a int PRIMARY KEY, b text);
154+ INSERT INTO tbl (a, b) SELECT i, 'foo' FROM generate_series(1, 3) i;
155+ UPDATE tbl SET b = 'bar' WHERE a = 1;
156+ NOTICE: DuckDB only supports INSERT/SELECT on Postgres tables
157+ DELETE FROM tbl WHERE a = 1;
158+ NOTICE: DuckDB only supports INSERT/SELECT on Postgres tables
159+ -- INSERT without subquery should also be blocked
160+ INSERT INTO tbl (a, b) VALUES (1, 'foo');
161+ NOTICE: DuckDB does not support INSERT without a subquery
162+ DROP TABLE tbl;
163+ SET duckdb.log_pg_explain to off;
164+ -- case: UNSUPPORTED TYPE
165+ CREATE TABLE tbl (a int, b xml);
166+ CREATE TABLE tbl1 (a int, b xml);
167+ INSERT INTO tbl (a, b) VALUES (1, '<xml>foo</xml>');
168+ SET duckdb.log_pg_explain to on;
169+ INSERT INTO tbl1 SELECT * FROM tbl;
170+ NOTICE: DuckDB does not support INSERTs into tables with column `b` of unsupported type (OID 142).
171+ DROP TABLE tbl, tbl1;
172+ SET duckdb.log_pg_explain to off;
0 commit comments