mirror of
https://github.com/postgres/postgres.git
synced 2025-06-11 20:28:21 +03:00
Support OID system column in postgres_fdw.
You can use ALTER FOREIGN TABLE SET WITH OIDS on a foreign table, but the oid column read out as zeros, because the postgres_fdw didn't know about it. Teach postgres_fdw how to fetch it. Etsuro Fujita, with an additional test case by me. Discussion: <56E90A76.5000503@lab.ntt.co.jp>
This commit is contained in:
@ -124,6 +124,13 @@ CREATE FOREIGN TABLE ft6 (
|
||||
c2 int NOT NULL,
|
||||
c3 text
|
||||
) SERVER loopback2 OPTIONS (schema_name 'S 1', table_name 'T 4');
|
||||
-- A table with oids. CREATE FOREIGN TABLE doesn't support the
|
||||
-- WITH OIDS option, but ALTER does.
|
||||
CREATE FOREIGN TABLE ft_pg_type (
|
||||
typname name,
|
||||
typlen smallint
|
||||
) SERVER loopback OPTIONS (schema_name 'pg_catalog', table_name 'pg_type');
|
||||
ALTER TABLE ft_pg_type SET WITH OIDS;
|
||||
-- ===================================================================
|
||||
-- tests for validator
|
||||
-- ===================================================================
|
||||
@ -173,15 +180,16 @@ ALTER FOREIGN TABLE ft2 OPTIONS (schema_name 'S 1', table_name 'T 1');
|
||||
ALTER FOREIGN TABLE ft1 ALTER COLUMN c1 OPTIONS (column_name 'C 1');
|
||||
ALTER FOREIGN TABLE ft2 ALTER COLUMN c1 OPTIONS (column_name 'C 1');
|
||||
\det+
|
||||
List of foreign tables
|
||||
Schema | Table | Server | FDW Options | Description
|
||||
--------+-------+-----------+---------------------------------------+-------------
|
||||
public | ft1 | loopback | (schema_name 'S 1', table_name 'T 1') |
|
||||
public | ft2 | loopback | (schema_name 'S 1', table_name 'T 1') |
|
||||
public | ft4 | loopback | (schema_name 'S 1', table_name 'T 3') |
|
||||
public | ft5 | loopback | (schema_name 'S 1', table_name 'T 4') |
|
||||
public | ft6 | loopback2 | (schema_name 'S 1', table_name 'T 4') |
|
||||
(5 rows)
|
||||
List of foreign tables
|
||||
Schema | Table | Server | FDW Options | Description
|
||||
--------+------------+-----------+--------------------------------------------------+-------------
|
||||
public | ft1 | loopback | (schema_name 'S 1', table_name 'T 1') |
|
||||
public | ft2 | loopback | (schema_name 'S 1', table_name 'T 1') |
|
||||
public | ft4 | loopback | (schema_name 'S 1', table_name 'T 3') |
|
||||
public | ft5 | loopback | (schema_name 'S 1', table_name 'T 4') |
|
||||
public | ft6 | loopback2 | (schema_name 'S 1', table_name 'T 4') |
|
||||
public | ft_pg_type | loopback | (schema_name 'pg_catalog', table_name 'pg_type') |
|
||||
(6 rows)
|
||||
|
||||
-- Now we should be able to run ANALYZE.
|
||||
-- To exercise multiple code paths, we use local stats on ft1
|
||||
@ -2485,7 +2493,7 @@ DEALLOCATE st2;
|
||||
DEALLOCATE st3;
|
||||
DEALLOCATE st4;
|
||||
DEALLOCATE st5;
|
||||
-- System columns, except ctid, should not be sent to remote
|
||||
-- System columns, except ctid and oid, should not be sent to remote
|
||||
EXPLAIN (VERBOSE, COSTS OFF)
|
||||
SELECT * FROM ft1 t1 WHERE t1.tableoid = 'pg_class'::regclass LIMIT 1;
|
||||
QUERY PLAN
|
||||
@ -2553,6 +2561,21 @@ SELECT ctid, * FROM ft1 t1 LIMIT 1;
|
||||
(0,1) | 1 | 1 | 00001 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1 | 1 | foo
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (VERBOSE, COSTS OFF)
|
||||
SELECT oid, * FROM ft_pg_type WHERE typname = 'int4';
|
||||
QUERY PLAN
|
||||
----------------------------------------------------------------------------------------------------
|
||||
Foreign Scan on public.ft_pg_type
|
||||
Output: oid, typname, typlen
|
||||
Remote SQL: SELECT typname, typlen, oid FROM pg_catalog.pg_type WHERE ((typname = 'int4'::name))
|
||||
(3 rows)
|
||||
|
||||
SELECT oid, * FROM ft_pg_type WHERE typname = 'int4';
|
||||
oid | typname | typlen
|
||||
-----+---------+--------
|
||||
23 | int4 | 4
|
||||
(1 row)
|
||||
|
||||
-- ===================================================================
|
||||
-- used in pl/pgsql function
|
||||
-- ===================================================================
|
||||
|
Reference in New Issue
Block a user