Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitb48eda4

Browse files
committed
Fix failure of ALTER FOREIGN TABLE SET SCHEMA to move sequences.
Ordinary ALTER TABLE SET SCHEMA will also move any owned sequencesinto the new schema. We failed to do likewise for foreign tables,because AlterTableNamespaceInternal believed that only certainrelkinds could have indexes, owned sequences, or constraints.We could simply add foreign tables to that relkind list, but itseems likely that the same oversight could be made again infuture. Instead let's remove the relkind filter altogether.These functions shouldn't cost much when there are no objectsthat they need to process, and surely this isn't an especiallyperformance-critical case anyway.Per bug #18407 from Vidushi Gupta. Back-patch to all supportedbranches.Discussion:https://postgr.es/m/18407-4fd07373d252c6a0@postgresql.org
1 parent3c3f4fd commitb48eda4

File tree

3 files changed

+24
-22
lines changed

3 files changed

+24
-22
lines changed

‎src/backend/commands/tablecmds.c

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16573,16 +16573,11 @@ AlterTableNamespaceInternal(Relation rel, Oid oldNspOid, Oid nspOid,
1657316573
nspOid, false, false, objsMoved);
1657416574

1657516575
/* Fix other dependent stuff */
16576-
if (rel->rd_rel->relkind == RELKIND_RELATION ||
16577-
rel->rd_rel->relkind == RELKIND_MATVIEW ||
16578-
rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE)
16579-
{
16580-
AlterIndexNamespaces(classRel, rel, oldNspOid, nspOid, objsMoved);
16581-
AlterSeqNamespaces(classRel, rel, oldNspOid, nspOid,
16582-
objsMoved, AccessExclusiveLock);
16583-
AlterConstraintNamespaces(RelationGetRelid(rel), oldNspOid, nspOid,
16584-
false, objsMoved);
16585-
}
16576+
AlterIndexNamespaces(classRel, rel, oldNspOid, nspOid, objsMoved);
16577+
AlterSeqNamespaces(classRel, rel, oldNspOid, nspOid,
16578+
objsMoved, AccessExclusiveLock);
16579+
AlterConstraintNamespaces(RelationGetRelid(rel), oldNspOid, nspOid,
16580+
false, objsMoved);
1658616581

1658716582
table_close(classRel, RowExclusiveLock);
1658816583
}

‎src/test/regress/expected/foreign_data.out

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -894,24 +894,29 @@ ERROR: column "no_column" of relation "ft1" does not exist
894894
ALTER FOREIGN TABLE ft1 DROP COLUMN IF EXISTS no_column;
895895
NOTICE: column "no_column" of relation "ft1" does not exist, skipping
896896
ALTER FOREIGN TABLE ft1 DROP COLUMN c9;
897+
ALTER FOREIGN TABLE ft1 ADD COLUMN c11 serial;
897898
ALTER FOREIGN TABLE ft1 SET SCHEMA foreign_schema;
898899
ALTER FOREIGN TABLE ft1 SET TABLESPACE ts; -- ERROR
899900
ERROR: relation "ft1" does not exist
901+
ALTER SEQUENCE foreign_schema.ft1_c11_seq SET SCHEMA public; -- ERROR
902+
ERROR: cannot move an owned sequence into another schema
903+
DETAIL: Sequence "ft1_c11_seq" is linked to table "ft1".
900904
ALTER FOREIGN TABLE foreign_schema.ft1 RENAME c1 TO foreign_column_1;
901905
ALTER FOREIGN TABLE foreign_schema.ft1 RENAME TO foreign_table_1;
902906
\d foreign_schema.foreign_table_1
903-
Foreign table "foreign_schema.foreign_table_1"
904-
Column | Type | Collation | Nullable | Default | FDW options
905-
------------------+---------+-----------+----------+---------+--------------------------------
906-
foreign_column_1 | integer | | not null | | ("param 1" 'val1')
907-
c2 | text | | | | (param2 'val2', param3 'val3')
908-
c3 | date | | | |
909-
c4 | integer | | | 0 |
910-
c5 | integer | | | |
911-
c6 | integer | | not null | |
912-
c7 | integer | | | | (p1 'v1', p2 'v2')
913-
c8 | text | | | | (p2 'V2')
914-
c10 | integer | | | | (p1 'v1')
907+
Foreign table "foreign_schema.foreign_table_1"
908+
Column | Type | Collation | Nullable | Default | FDW options
909+
------------------+---------+-----------+----------+-------------------------------------------------+--------------------------------
910+
foreign_column_1 | integer | | not null | | ("param 1" 'val1')
911+
c2 | text | | | | (param2 'val2', param3 'val3')
912+
c3 | date | | | |
913+
c4 | integer | | | 0 |
914+
c5 | integer | | | |
915+
c6 | integer | | not null | |
916+
c7 | integer | | | | (p1 'v1', p2 'v2')
917+
c8 | text | | | | (p2 'V2')
918+
c10 | integer | | | | (p1 'v1')
919+
c11 | integer | | not null | nextval('foreign_schema.ft1_c11_seq'::regclass) |
915920
Check constraints:
916921
"ft1_c2_check" CHECK (c2 <> ''::text)
917922
"ft1_c3_check" CHECK (c3 >= '01-01-1994'::date AND c3 <= '01-31-1994'::date)

‎src/test/regress/sql/foreign_data.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,8 +419,10 @@ ALTER FOREIGN TABLE ft1 OPTIONS (DROP delimiter, SET quote '~', ADD escape '@');
419419
ALTER FOREIGN TABLE ft1 DROP COLUMN no_column;-- ERROR
420420
ALTER FOREIGN TABLE ft1 DROP COLUMN IF EXISTS no_column;
421421
ALTER FOREIGN TABLE ft1 DROP COLUMN c9;
422+
ALTER FOREIGN TABLE ft1 ADD COLUMN c11serial;
422423
ALTER FOREIGN TABLE ft1SET SCHEMA foreign_schema;
423424
ALTER FOREIGN TABLE ft1SET TABLESPACE ts;-- ERROR
425+
ALTERSEQUENCEforeign_schema.ft1_c11_seqSET SCHEMA public;-- ERROR
424426
ALTER FOREIGN TABLEforeign_schema.ft1 RENAME c1 TO foreign_column_1;
425427
ALTER FOREIGN TABLEforeign_schema.ft1 RENAME TO foreign_table_1;
426428
\dforeign_schema.foreign_table_1

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp