From df11f28593e874f6c0b01c63dc272a96528adca9 Mon Sep 17 00:00:00 2001 From: Akshay Joshi Date: Mon, 13 Apr 2020 18:06:20 +0530 Subject: [PATCH] =?UTF-8?q?Fixed=20an=20issue=20where=20the=20identical=20?= =?UTF-8?q?packages=20and=20sequences=20visible=C2=A0as=20different=20in?= =?UTF-8?q?=20the=20schema=20diff=20tool.=20Fixes=20#5362?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en_US/release_notes_4_21.rst | 3 ++- .../servers/databases/schemas/packages/__init__.py | 2 +- .../servers/databases/schemas/sequences/__init__.py | 1 + .../sequences/templates/sequences/sql/default/update.sql | 3 +++ .../sequences/tests/pg/default/alter_seq_privs_add.sql | 2 +- .../sequences/tests/pg/default/alter_seq_privs_remove.sql | 2 +- .../sequences/tests/pg/default/alter_seq_privs_update.sql | 2 +- .../sequences/tests/pg/default/alter_seq_props.sql | 2 +- .../sequences/tests/ppas/default/alter_seq_privs_add.sql | 2 +- .../tests/ppas/default/alter_seq_privs_remove.sql | 2 +- .../tests/ppas/default/alter_seq_privs_update.sql | 2 +- .../sequences/tests/ppas/default/alter_seq_props.sql | 2 +- web/pgadmin/tools/schema_diff/tests/pg/10_plus/source.sql | 8 ++++++++ web/pgadmin/tools/schema_diff/tests/pg/10_plus/target.sql | 8 ++++++++ web/pgadmin/tools/schema_diff/tests/pg/11_plus/source.sql | 8 ++++++++ web/pgadmin/tools/schema_diff/tests/pg/11_plus/target.sql | 8 ++++++++ web/pgadmin/tools/schema_diff/tests/pg/12_plus/source.sql | 8 ++++++++ web/pgadmin/tools/schema_diff/tests/pg/12_plus/target.sql | 8 ++++++++ .../tools/schema_diff/tests/pg/9.2_plus/source.sql | 8 ++++++++ .../tools/schema_diff/tests/pg/9.2_plus/target.sql | 8 ++++++++ .../tools/schema_diff/tests/ppas/10_plus/source.sql | 8 ++++++++ .../tools/schema_diff/tests/ppas/10_plus/target.sql | 8 ++++++++ .../tools/schema_diff/tests/ppas/9.2_plus/source.sql | 8 ++++++++ .../tools/schema_diff/tests/ppas/9.2_plus/target.sql | 8 ++++++++ 24 files changed, 111 insertions(+), 10 deletions(-) diff --git a/docs/en_US/release_notes_4_21.rst b/docs/en_US/release_notes_4_21.rst index 1304685bc..86a356ef0 100644 --- a/docs/en_US/release_notes_4_21.rst +++ b/docs/en_US/release_notes_4_21.rst @@ -42,4 +42,5 @@ Bug fixes | `Issue #5275 `_ - Fixed tab key navigation issue for parameters in table dialog. | `Issue #5314 `_ - Ensure that switch cell is in sync with switch control for accessibility. | `Issue #5351 `_ - Fixed compilation warnings while building pgAdmin. -| `Issue #5361 `_ - Fixes an issue where pgAdmin4 GUI does not display properly in IE 11. \ No newline at end of file +| `Issue #5361 `_ - Fixes an issue where pgAdmin4 GUI does not display properly in IE 11. +| `Issue #5362 `_ - Fixed an issue where the identical packages and sequences visible as different in the schema diff tool. \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/__init__.py index 1f2bdc73e..ad2e2b800 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/__init__.py @@ -113,7 +113,7 @@ class PackageView(PGChildNodeView, SchemaDiffObjectCompare): 'dependent': [{'get': 'dependents'}] }) - keys_to_ignore = ['oid', 'schema', 'xmin', 'oid-2'] + keys_to_ignore = ['oid', 'schema', 'xmin', 'oid-2', 'acl'] def check_precondition(action=None): """ diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/__init__.py index b33a7699b..9e8a52335 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/__init__.py @@ -716,6 +716,7 @@ class SequenceView(PGChildNodeView, SchemaDiffObjectCompare): row['minimum'] = rset1['rows'][0]['min_value'] row['maximum'] = rset1['rows'][0]['max_value'] row['increment'] = rset1['rows'][0]['increment_by'] + row['start'] = rset1['rows'][0]['start_value'] row['cache'] = rset1['rows'][0]['cache_value'] row['cycled'] = rset1['rows'][0]['is_cycled'] diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/update.sql index dff5700b5..2d42249b5 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/update.sql @@ -20,6 +20,9 @@ SELECT setval({{ seqname|qtLiteral }}, {{ data.current_value }}, true); {% if data.increment is defined %} {% set defquery = defquery+'\n INCREMENT '+data.increment|string %} {% endif %} +{% if data.start is defined %} +{% set defquery = defquery+'\n START '+data.start|string %} +{% endif %} {% if data.minimum is defined %} {% set defquery = defquery+'\n MINVALUE '+data.minimum|string %} {% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_seq_privs_add.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_seq_privs_add.sql index bd25682b9..b2b01f30a 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_seq_privs_add.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_seq_privs_add.sql @@ -5,7 +5,7 @@ CREATE SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#" CYCLE INCREMENT 12 - START 7 + START 5 MINVALUE 2 MAXVALUE 9992 CACHE 2; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_seq_privs_remove.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_seq_privs_remove.sql index 71da83b5f..be3e8664e 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_seq_privs_remove.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_seq_privs_remove.sql @@ -5,7 +5,7 @@ CREATE SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#" CYCLE INCREMENT 12 - START 7 + START 5 MINVALUE 2 MAXVALUE 9992 CACHE 2; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_seq_privs_update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_seq_privs_update.sql index ba9e2a2a6..0a35bdff5 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_seq_privs_update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_seq_privs_update.sql @@ -5,7 +5,7 @@ CREATE SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#" CYCLE INCREMENT 12 - START 7 + START 5 MINVALUE 2 MAXVALUE 9992 CACHE 2; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_seq_props.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_seq_props.sql index 9b29c67d9..eda09873a 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_seq_props.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_seq_props.sql @@ -5,7 +5,7 @@ CREATE SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#" CYCLE INCREMENT 12 - START 7 + START 5 MINVALUE 2 MAXVALUE 9992 CACHE 2; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_seq_privs_add.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_seq_privs_add.sql index 7a46a3556..f8a616915 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_seq_privs_add.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_seq_privs_add.sql @@ -5,7 +5,7 @@ CREATE SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#" CYCLE INCREMENT 12 - START 7 + START 5 MINVALUE 2 MAXVALUE 9992 CACHE 2; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_seq_privs_remove.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_seq_privs_remove.sql index c9794c037..39eaf4b8d 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_seq_privs_remove.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_seq_privs_remove.sql @@ -5,7 +5,7 @@ CREATE SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#" CYCLE INCREMENT 12 - START 7 + START 5 MINVALUE 2 MAXVALUE 9992 CACHE 2; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_seq_privs_update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_seq_privs_update.sql index a414c8db6..2694dc98c 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_seq_privs_update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_seq_privs_update.sql @@ -5,7 +5,7 @@ CREATE SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#" CYCLE INCREMENT 12 - START 7 + START 5 MINVALUE 2 MAXVALUE 9992 CACHE 2; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_seq_props.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_seq_props.sql index 3c5f254a6..4dc703346 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_seq_props.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_seq_props.sql @@ -5,7 +5,7 @@ CREATE SEQUENCE public."Seq1_$%{}[]()&*^!@""'`\/#" CYCLE INCREMENT 12 - START 7 + START 5 MINVALUE 2 MAXVALUE 9992 CACHE 2; diff --git a/web/pgadmin/tools/schema_diff/tests/pg/10_plus/source.sql b/web/pgadmin/tools/schema_diff/tests/pg/10_plus/source.sql index 6855c3f94..477c62b27 100644 --- a/web/pgadmin/tools/schema_diff/tests/pg/10_plus/source.sql +++ b/web/pgadmin/tools/schema_diff/tests/pg/10_plus/source.sql @@ -736,6 +736,14 @@ CREATE SEQUENCE source.seq_diff ALTER SEQUENCE source.seq_diff OWNER TO postgres; +CREATE SEQUENCE source.seq_start_diff + INCREMENT 5 + START 3 + MINVALUE 3 + MAXVALUE 20; +ALTER SEQUENCE source.seq_start_diff + OWNER TO postgres; + -- Foreign Data Wrapper to test foreign table CREATE FOREIGN DATA WRAPPER test_fdw_for_foreign_table; ALTER FOREIGN DATA WRAPPER test_fdw_for_foreign_table diff --git a/web/pgadmin/tools/schema_diff/tests/pg/10_plus/target.sql b/web/pgadmin/tools/schema_diff/tests/pg/10_plus/target.sql index 8e466217a..2e17197ef 100644 --- a/web/pgadmin/tools/schema_diff/tests/pg/10_plus/target.sql +++ b/web/pgadmin/tools/schema_diff/tests/pg/10_plus/target.sql @@ -687,6 +687,14 @@ CREATE SEQUENCE target.seq_diff ALTER SEQUENCE target.seq_diff OWNER TO postgres; +CREATE SEQUENCE target.seq_start_diff + INCREMENT 5 + START 1 + MINVALUE 1 + MAXVALUE 20; +ALTER SEQUENCE target.seq_start_diff + OWNER TO postgres; + -- Foreign Data Wrapper to test foreign table CREATE FOREIGN DATA WRAPPER test_fdw_for_foreign_table; ALTER FOREIGN DATA WRAPPER test_fdw_for_foreign_table diff --git a/web/pgadmin/tools/schema_diff/tests/pg/11_plus/source.sql b/web/pgadmin/tools/schema_diff/tests/pg/11_plus/source.sql index 3d8ef8141..f9b4516ca 100644 --- a/web/pgadmin/tools/schema_diff/tests/pg/11_plus/source.sql +++ b/web/pgadmin/tools/schema_diff/tests/pg/11_plus/source.sql @@ -699,6 +699,14 @@ CREATE SEQUENCE source.seq_diff ALTER SEQUENCE source.seq_diff OWNER TO postgres; +CREATE SEQUENCE source.seq_start_diff + INCREMENT 5 + START 3 + MINVALUE 3 + MAXVALUE 20; +ALTER SEQUENCE source.seq_start_diff + OWNER TO postgres; + -- Foreign Data Wrapper to test foreign table CREATE FOREIGN DATA WRAPPER test_fdw_for_foreign_table; ALTER FOREIGN DATA WRAPPER test_fdw_for_foreign_table diff --git a/web/pgadmin/tools/schema_diff/tests/pg/11_plus/target.sql b/web/pgadmin/tools/schema_diff/tests/pg/11_plus/target.sql index 7ec8e82cd..d4cc8ad4b 100644 --- a/web/pgadmin/tools/schema_diff/tests/pg/11_plus/target.sql +++ b/web/pgadmin/tools/schema_diff/tests/pg/11_plus/target.sql @@ -686,6 +686,14 @@ CREATE SEQUENCE target.seq_diff ALTER SEQUENCE target.seq_diff OWNER TO postgres; +CREATE SEQUENCE target.seq_start_diff + INCREMENT 5 + START 1 + MINVALUE 1 + MAXVALUE 20; +ALTER SEQUENCE target.seq_start_diff + OWNER TO postgres; + -- Foreign Data Wrapper to test foreign table CREATE FOREIGN DATA WRAPPER test_fdw_for_foreign_table; ALTER FOREIGN DATA WRAPPER test_fdw_for_foreign_table diff --git a/web/pgadmin/tools/schema_diff/tests/pg/12_plus/source.sql b/web/pgadmin/tools/schema_diff/tests/pg/12_plus/source.sql index 4cfeeb599..699cef8bb 100644 --- a/web/pgadmin/tools/schema_diff/tests/pg/12_plus/source.sql +++ b/web/pgadmin/tools/schema_diff/tests/pg/12_plus/source.sql @@ -700,6 +700,14 @@ CREATE SEQUENCE source.seq_diff ALTER SEQUENCE source.seq_diff OWNER TO postgres; +CREATE SEQUENCE source.seq_start_diff + INCREMENT 5 + START 3 + MINVALUE 3 + MAXVALUE 20; +ALTER SEQUENCE source.seq_start_diff + OWNER TO postgres; + -- Foreign Data Wrapper to test foreign table CREATE FOREIGN DATA WRAPPER test_fdw_for_foreign_table; ALTER FOREIGN DATA WRAPPER test_fdw_for_foreign_table diff --git a/web/pgadmin/tools/schema_diff/tests/pg/12_plus/target.sql b/web/pgadmin/tools/schema_diff/tests/pg/12_plus/target.sql index 5f7c06a10..3a6a21a13 100644 --- a/web/pgadmin/tools/schema_diff/tests/pg/12_plus/target.sql +++ b/web/pgadmin/tools/schema_diff/tests/pg/12_plus/target.sql @@ -675,6 +675,14 @@ CREATE SEQUENCE target.seq_diff ALTER SEQUENCE target.seq_diff OWNER TO postgres; +CREATE SEQUENCE target.seq_start_diff + INCREMENT 5 + START 1 + MINVALUE 1 + MAXVALUE 20; +ALTER SEQUENCE target.seq_start_diff + OWNER TO postgres; + -- Foreign Data Wrapper to test foreign table CREATE FOREIGN DATA WRAPPER test_fdw_for_foreign_table; ALTER FOREIGN DATA WRAPPER test_fdw_for_foreign_table diff --git a/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/source.sql b/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/source.sql index dc274e1ad..8131645ea 100644 --- a/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/source.sql +++ b/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/source.sql @@ -569,6 +569,14 @@ CREATE SEQUENCE source.seq_diff ALTER SEQUENCE source.seq_diff OWNER TO postgres; +CREATE SEQUENCE source.seq_start_diff + INCREMENT 5 + START 3 + MINVALUE 3 + MAXVALUE 20; +ALTER SEQUENCE source.seq_start_diff + OWNER TO postgres; + -- Foreign Data Wrapper to test foreign table CREATE FOREIGN DATA WRAPPER test_fdw_for_foreign_table; ALTER FOREIGN DATA WRAPPER test_fdw_for_foreign_table diff --git a/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/target.sql b/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/target.sql index ea8b4477c..8ae203045 100644 --- a/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/target.sql +++ b/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/target.sql @@ -593,6 +593,14 @@ CREATE SEQUENCE target.seq_diff ALTER SEQUENCE target.seq_diff OWNER TO postgres; +CREATE SEQUENCE target.seq_start_diff + INCREMENT 5 + START 1 + MINVALUE 1 + MAXVALUE 20; +ALTER SEQUENCE target.seq_start_diff + OWNER TO postgres; + -- Foreign Data Wrapper to test foreign table CREATE FOREIGN DATA WRAPPER test_fdw_for_foreign_table; ALTER FOREIGN DATA WRAPPER test_fdw_for_foreign_table diff --git a/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/source.sql b/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/source.sql index dd4547550..65e1c6a7a 100644 --- a/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/source.sql +++ b/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/source.sql @@ -797,6 +797,14 @@ CREATE SEQUENCE source.seq_diff ALTER SEQUENCE source.seq_diff OWNER TO enterprisedb; +CREATE SEQUENCE source.seq_start_diff + INCREMENT 5 + START 3 + MINVALUE 3 + MAXVALUE 20; +ALTER SEQUENCE source.seq_start_diff + OWNER TO enterprisedb; + -- Foreign Data Wrapper to test foreign table CREATE FOREIGN DATA WRAPPER test_fdw_for_foreign_table; ALTER FOREIGN DATA WRAPPER test_fdw_for_foreign_table diff --git a/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/target.sql b/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/target.sql index 4dfc115bc..bbc798fd9 100644 --- a/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/target.sql +++ b/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/target.sql @@ -774,6 +774,14 @@ CREATE SEQUENCE target.seq_diff ALTER SEQUENCE target.seq_diff OWNER TO enterprisedb; +CREATE SEQUENCE target.seq_start_diff + INCREMENT 5 + START 1 + MINVALUE 1 + MAXVALUE 20; +ALTER SEQUENCE target.seq_start_diff + OWNER TO enterprisedb; + -- Foreign Data Wrapper to test foreign table CREATE FOREIGN DATA WRAPPER test_fdw_for_foreign_table; ALTER FOREIGN DATA WRAPPER test_fdw_for_foreign_table diff --git a/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/source.sql b/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/source.sql index 6cb9b0e70..1948eb2e9 100644 --- a/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/source.sql +++ b/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/source.sql @@ -729,6 +729,14 @@ CREATE SEQUENCE source.seq_diff ALTER SEQUENCE source.seq_diff OWNER TO enterprisedb; +CREATE SEQUENCE source.seq_start_diff + INCREMENT 5 + START 3 + MINVALUE 3 + MAXVALUE 20; +ALTER SEQUENCE source.seq_start_diff + OWNER TO enterprisedb; + -- Foreign Data Wrapper to test foreign table CREATE FOREIGN DATA WRAPPER test_fdw_for_foreign_table; ALTER FOREIGN DATA WRAPPER test_fdw_for_foreign_table diff --git a/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/target.sql b/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/target.sql index c3ab7a1fc..65be2e722 100644 --- a/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/target.sql +++ b/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/target.sql @@ -743,6 +743,14 @@ CREATE SEQUENCE target.seq_diff ALTER SEQUENCE target.seq_diff OWNER TO enterprisedb; +CREATE SEQUENCE target.seq_start_diff + INCREMENT 5 + START 1 + MINVALUE 1 + MAXVALUE 20; +ALTER SEQUENCE target.seq_start_diff + OWNER TO enterprisedb; + -- Foreign Data Wrapper to test foreign table CREATE FOREIGN DATA WRAPPER test_fdw_for_foreign_table; ALTER FOREIGN DATA WRAPPER test_fdw_for_foreign_table