BUG #6051: wCTE query fail with wrong error text on a table with rules
От | Jehan-Guillaume (ioguix) de Rorthais |
---|---|
Тема | BUG #6051: wCTE query fail with wrong error text on a table with rules |
Дата | |
Msg-id | 201106031542.p53FgDh5073991@wwwmaster.postgresql.org обсуждение исходный текст |
Ответы |
Re: BUG #6051: wCTE query fail with wrong error text on a
table with rules
|
Список | pgsql-bugs |
The following bug has been logged online: Bug reference: 6051 Logged by: Jehan-Guillaume (ioguix) de Rorthais Email address: jgdr@dalibo.com PostgreSQL version: 9.1beta1 Operating system: Linux x86_64 Description: wCTE query fail with wrong error text on a table with rules Details: While testing wCTE, I tried to empty a parent table, feeding its child using rules with this kind of query: WITH t1 AS ( DELETE FROM ONLY test RETURNING * ) INSERT INTO test SELECT * FROM t1; It works perfectly on a table without rules, but fail with what seems like a non related error message if there is a rule on INSERT on this table: test=# WITH t1 AS ( DELETE FROM ONLY test RETURNING * ) INSERT INTO test SELECT * FROM t1; ERROR: could not find CTE "t1" I was expecting this query either to work or raise a comprehensive error message. Here is a simple script to reproduce this behaviour: ======================> $ createdb test $ psql test psql (9.1beta1) Type "help" for help. test=# SELECT version(); version ---------------------------------------------------------------------------- -------------------------------- PostgreSQL 9.1beta1 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.6.0 20110513 (prerelease), 64-bit (1 row) test=# CREATE table test AS select i from generate_series(1,3) as t(i); SELECT 3 test=# SELECT * FROM test; i --- 1 2 3 (3 rows) test=# WITH t1 AS ( test(# DELETE FROM ONLY test RETURNING * test(# ) test-# INSERT INTO test SELECT * FROM t1; INSERT 0 3 test=# SELECT * FROM test; i --- 1 2 3 (3 rows) test=# CREATE TABLE test2 () inherits (test); CREATE TABLE test=# CREATE RULE test_ins AS ON INSERT TO test DO INSTEAD INSERT INTO test2 VALUES (NEW.i); CREATE RULE test=# WITH t1 AS ( DELETE FROM ONLY test RETURNING * ) INSERT INTO test SELECT * FROM t1; ERROR: could not find CTE "t1" <======================
В списке pgsql-bugs по дате отправления: