Resolve failures related to pg_node_tree type input
authorTomas Vondra <tomas@2ndquadrant.com>
Mon, 17 Jul 2017 21:26:25 +0000 (23:26 +0200)
committerTomas Vondra <tomas@2ndquadrant.com>
Mon, 17 Jul 2017 21:26:25 +0000 (23:26 +0200)
The input function for pg_node_tree pseudotype simply returns an error,
essentially disabling input from text. Some of the regression tests do

    CREATE TABLE t AS SELECT * FROM pg_class;

or something like that, which works fine on PostgreSQL, but it fails on
Postgres-XL as we need to send data between nodes. Unfortunately the
pg_class now contains pg_node_tree column (relpartbound), causing falure
when reading the column on the remote node.

So instead use another catalogue, for example pg_attribute, which does
not contain any such column.

src/test/regress/expected/create_table.out
src/test/regress/expected/select_into.out
src/test/regress/sql/create_table.sql
src/test/regress/sql/select_into.sql

index c63a0bacac6d3965ec2b98860744f613d8b84146..bccf20d6048e1687d7d358a77b61870f60e7fa16 100644 (file)
@@ -252,10 +252,10 @@ ERROR:  cannot create temporary relation in non-temporary schema
 LINE 1: CREATE TEMP TABLE public.temp_to_perm (a int primary key);
                           ^
 DROP TABLE unlogged1, public.unlogged2;
-CREATE TABLE as_select1 AS SELECT * FROM pg_class WHERE relkind = 'r';
-CREATE TABLE as_select1 AS SELECT * FROM pg_class WHERE relkind = 'r';
+CREATE TABLE as_select1 AS SELECT * FROM pg_attribute WHERE attstorage = 'p';
+CREATE TABLE as_select1 AS SELECT * FROM pg_attribute WHERE attstorage = 'p';
 ERROR:  relation "as_select1" already exists
-CREATE TABLE IF NOT EXISTS as_select1 AS SELECT * FROM pg_class WHERE relkind = 'r';
+CREATE TABLE IF NOT EXISTS as_select1 AS SELECT * FROM pg_attribute WHERE attstorage = 'p';
 NOTICE:  relation "as_select1" already exists, skipping
 DROP TABLE as_select1;
 -- check that the oid column is added before the primary key is checked
index 11b61b592c1ed9a2eb065774ec50fc2d185c24c2..2afc70fdb230b7659b019f4a97ec7550efb85639 100644 (file)
@@ -21,7 +21,7 @@ ALTER DEFAULT PRIVILEGES FOR ROLE regress_selinto_user
 GRANT ALL ON SCHEMA selinto_schema TO public;
 SET SESSION AUTHORIZATION regress_selinto_user;
 SELECT * INTO TABLE selinto_schema.tmp1
-         FROM pg_class WHERE relname like '%a%';       -- Error
+         FROM pg_attribute WHERE attname like '%a%';   -- Error
 ERROR:  permission denied for relation tmp1
 SELECT oid AS clsoid, relname, relnatts + 10 AS x
          INTO selinto_schema.tmp2
@@ -36,7 +36,7 @@ ALTER DEFAULT PRIVILEGES FOR ROLE regress_selinto_user
          GRANT INSERT ON TABLES TO regress_selinto_user;
 SET SESSION AUTHORIZATION regress_selinto_user;
 SELECT * INTO TABLE selinto_schema.tmp1
-         FROM pg_class WHERE relname like '%a%';       -- OK
+         FROM pg_attribute WHERE attname like '%a%';   -- OK
 SELECT oid AS clsoid, relname, relnatts + 10 AS x
          INTO selinto_schema.tmp2
          FROM pg_class WHERE relname like '%b%';       -- OK
index 62328353e99e632f46def6fd68feb908b62ebaa6..1e68213b0a471c818ea09cc78fd1c85356038dff 100644 (file)
@@ -268,9 +268,9 @@ CREATE TEMP TABLE pg_temp.doubly_temp (a int primary key);          -- also OK
 CREATE TEMP TABLE public.temp_to_perm (a int primary key);             -- not OK
 DROP TABLE unlogged1, public.unlogged2;
 
-CREATE TABLE as_select1 AS SELECT * FROM pg_class WHERE relkind = 'r';
-CREATE TABLE as_select1 AS SELECT * FROM pg_class WHERE relkind = 'r';
-CREATE TABLE IF NOT EXISTS as_select1 AS SELECT * FROM pg_class WHERE relkind = 'r';
+CREATE TABLE as_select1 AS SELECT * FROM pg_attribute WHERE attstorage = 'p';
+CREATE TABLE as_select1 AS SELECT * FROM pg_attribute WHERE attstorage = 'p';
+CREATE TABLE IF NOT EXISTS as_select1 AS SELECT * FROM pg_attribute WHERE attstorage = 'p';
 DROP TABLE as_select1;
 
 -- check that the oid column is added before the primary key is checked
index 5cb7ce0922633c295ca1003443de3a07b4ce223c..9adfbdc09ec9873454b66405e1332bd214940081 100644 (file)
@@ -27,7 +27,7 @@ GRANT ALL ON SCHEMA selinto_schema TO public;
 
 SET SESSION AUTHORIZATION regress_selinto_user;
 SELECT * INTO TABLE selinto_schema.tmp1
-         FROM pg_class WHERE relname like '%a%';       -- Error
+         FROM pg_attribute WHERE attname like '%a%';   -- Error
 SELECT oid AS clsoid, relname, relnatts + 10 AS x
          INTO selinto_schema.tmp2
          FROM pg_class WHERE relname like '%b%';       -- Error
@@ -41,7 +41,7 @@ ALTER DEFAULT PRIVILEGES FOR ROLE regress_selinto_user
 
 SET SESSION AUTHORIZATION regress_selinto_user;
 SELECT * INTO TABLE selinto_schema.tmp1
-         FROM pg_class WHERE relname like '%a%';       -- OK
+         FROM pg_attribute WHERE attname like '%a%';   -- OK
 SELECT oid AS clsoid, relname, relnatts + 10 AS x
          INTO selinto_schema.tmp2
          FROM pg_class WHERE relname like '%b%';       -- OK