↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

Wiki / SQL 命令

ALTER FOREIGN TABLE

更改外部表的定义

英文手册覆盖始于 PostgreSQL 6.4. 来源历史与运行验证各自保留独立版本边界。

当前阅读 PG 18·选择有来源记录的版本

anchor
SQL-ALTERFOREIGNTABLE
file
sql-alterforeigntable.html
lang
en
name
ALTER FOREIGN TABLE
purpose
change the definition of a foreign table
purpose zh
未知
sections same as
未知
slug
18

语法

ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
action [, ... ]
ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
RENAME [ COLUMN ] column_name TO new_column_name
ALTER FOREIGN TABLE [ IF EXISTS ] name
RENAME TO new_name
ALTER FOREIGN TABLE [ IF EXISTS ] name
SET SCHEMA new_schema
where action is one of:

ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ]
DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ]
ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type [ COLLATE collation ]
ALTER [ COLUMN ] column_name SET DEFAULT expression
ALTER [ COLUMN ] column_name DROP DEFAULT
ALTER [ COLUMN ] column_name { SET | DROP } NOT NULL
ALTER [ COLUMN ] column_name SET STATISTICS integer
ALTER [ COLUMN ] column_name SET ( attribute_option = value [, ... ] )
ALTER [ COLUMN ] column_name RESET ( attribute_option [, ... ] )
ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }
ALTER [ COLUMN ] column_name OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ])
ADD table_constraint [ NOT VALID ]
VALIDATE CONSTRAINT constraint_name
DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ]
DISABLE TRIGGER [ trigger_name | ALL | USER ]
ENABLE TRIGGER [ trigger_name | ALL | USER ]
ENABLE REPLICA TRIGGER trigger_name
ENABLE ALWAYS TRIGGER trigger_name
SET WITHOUT OIDS
INHERIT parent_table
NO INHERIT parent_table
OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ])
语法图

从左向右阅读;分支表示选择,旁路表示可选,循环表示重复。点击带下划线的参数可打开对应规则。

ALTER FOREIGN TABLE IF EXISTS ONLY name * action ,
ALTER FOREIGN TABLE · 语法 2
ALTER FOREIGN TABLE IF EXISTS ONLY name * RENAME COLUMN column_name TO new_column_name
ALTER FOREIGN TABLE · 语法 3
ALTER FOREIGN TABLE IF EXISTS name RENAME TO new_name
ALTER FOREIGN TABLE · 语法 4
ALTER FOREIGN TABLE IF EXISTS name SET SCHEMA new_schema
action
ADD COLUMN IF NOT EXISTS column_name data_type COLLATE collation column_constraint DROP COLUMN IF EXISTS column_name RESTRICT CASCADE ALTER COLUMN column_name SET DATA TYPE data_type COLLATE collation ALTER COLUMN column_name SET DEFAULT expression ALTER COLUMN column_name DROP DEFAULT ALTER COLUMN column_name SET DROP NOT NULL ALTER COLUMN column_name SET STATISTICS integer ALTER COLUMN column_name SET ( attribute_option = value , ) ALTER COLUMN column_name RESET ( attribute_option , ) ALTER COLUMN column_name SET STORAGE PLAIN EXTERNAL EXTENDED MAIN DEFAULT ALTER COLUMN column_name OPTIONS ( ADD SET DROP option ' value ' , ) ADD table_constraint NOT VALID VALIDATE CONSTRAINT constraint_name DROP CONSTRAINT IF EXISTS constraint_name RESTRICT CASCADE DISABLE TRIGGER trigger_name ALL USER ENABLE TRIGGER trigger_name ALL USER ENABLE REPLICA TRIGGER trigger_name ENABLE ALWAYS TRIGGER trigger_name SET WITHOUT OIDS INHERIT parent_table NO INHERIT parent_table OWNER TO new_owner CURRENT_ROLE CURRENT_USER SESSION_USER OPTIONS ( ADD SET DROP option ' value ' , )

版本定义 PG 18

ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
action [, ... ]
ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
RENAME [ COLUMN ] column_name TO new_column_name
ALTER FOREIGN TABLE [ IF EXISTS ] name
RENAME TO new_name
ALTER FOREIGN TABLE [ IF EXISTS ] name
SET SCHEMA new_schema
其中 action 是以下之一:

ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ]
DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ]
ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type [ COLLATE collation ]
ALTER [ COLUMN ] column_name SET DEFAULT expression
ALTER [ COLUMN ] column_name DROP DEFAULT
ALTER [ COLUMN ] column_name { SET | DROP } NOT NULL
ALTER [ COLUMN ] column_name SET STATISTICS integer
ALTER [ COLUMN ] column_name SET ( attribute_option = value [, ... ] )
ALTER [ COLUMN ] column_name RESET ( attribute_option [, ... ] )
ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }
ALTER [ COLUMN ] column_name OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ])
ADD table_constraint [ NOT VALID ]
VALIDATE CONSTRAINT constraint_name
DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ]
DISABLE TRIGGER [ trigger_name | ALL | USER ]
ENABLE TRIGGER [ trigger_name | ALL | USER ]
ENABLE REPLICA TRIGGER trigger_name
ENABLE ALWAYS TRIGGER trigger_name
SET WITHOUT OIDS
INHERIT parent_table
NO INHERIT parent_table
OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ])

描述

ALTER FOREIGN TABLE更改现有外部表的定义。有几种子形式:

ADD [ COLUMN ] [ IF NOT EXISTS ]

该形式使用与 CREATE FOREIGN TABLE 相同的语法向外部表添加一个新列。如果指定了IF NOT EXISTS并且已存在同名列,则不会抛出错误。与向普通表添加列的情况不同,底层存储不会发生任何变化:该操作只是声明现在可以通过该外部表访问某个新列。

DROP [ COLUMN ] [ IF EXISTS ]

该形式从外部表中删除一列。如果该表之外的任何对象依赖于该列,例如视图,则需要指定CASCADE。如果指定了IF EXISTS 而该列不存在,则不会抛出错误,而是改为发出一条提示。

SET DATA TYPE

该形式更改外部表中一列的类型。同样,这不会影响任何底层存储:该操作只是更改PostgreSQL认为该列具有的类型。

SET/DROP DEFAULT

这些形式为列设置或移除默认值。默认值只会应用于后续的 INSERT或UPDATE命令;它们不会导致表中已有的行发生变化。

SET/DROP NOT NULL

把一列标记为允许或不允许空值。

SET STATISTICS

该形式为后续 ANALYZE操作设置每列的统计信息收集目标。详见ALTER TABLE的类似形式。

SET ( attribute_option = value [, ... ] )
RESET ( attribute_option [, ... ] )

该形式设置或重置每个属性的选项。详见ALTER TABLE的类似形式。

SET STORAGE

该形式设置列的存储模式。详见ALTER TABLE的类似形式。注意,除非该表的外部数据包装器选择理会该设置,否则存储模式不会产生效果。

ADD table_constraint [ NOT VALID ]

该形式使用与 CREATE FOREIGN TABLE 相同的语法为外部表添加一个新约束。目前只支持 CHECK和NOT NULL约束。

与向普通表添加约束的情况不同,不会采取任何措施来验证该约束是否正确;该操作只是声明应当假定外部表中的所有行都满足某个新条件。(参见 CREATE FOREIGN TABLE 中的讨论。)如果约束被标记为NOT VALID(仅在CHECK 的情况下允许),则不会假定它成立,而只是将其记录下来供将来可能使用。

VALIDATE CONSTRAINT

该形式把先前被标记为NOT VALID的约束标记为有效。不会采取任何措施来验证该约束,但未来的查询会假定它成立。

DROP CONSTRAINT [ IF EXISTS ]

该形式删除外部表上指定的约束。如果指定了IF EXISTS 而该约束不存在,则不会抛出错误,而是改为发出一条提示。

DISABLE/ENABLE [ REPLICA | ALWAYS ] TRIGGER

这些形式配置属于该外部表的触发器的触发方式。详见ALTER TABLE的类似形式。

SET WITHOUT OIDS

这是用于移除oid系统列的向后兼容语法。由于如今已无法再添加oid系统列,因此它实际上永远不会产生任何效果。

INHERIT parent_table

该形式把目标外部表添加为指定父表的一个新子表。详见ALTER TABLE的类似形式。

NO INHERIT parent_table

该形式把目标外部表从指定父表的子表列表中移除。

OWNER

该形式把外部表的拥有者更改为指定用户。

OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ] )

更改外部表或其某一列的选项。ADD、SET 和DROP指定要执行的动作。如果没有显式指定操作,则默认是 ADD。不允许重复的选项名(不过表选项和列选项同名是可以的)。选项名和值也会通过外部数据包装器库进行验证。

RENAME

RENAME形式更改外部表的名称,或者更改其中某一列的名称。

SET SCHEMA

该形式把外部表移动到另一个模式中。

除了RENAME和SET SCHEMA之外,所有动作都可以组合在一个包含多项修改的列表中一并应用。例如,可以在一条命令中添加多个列和/或更改多个列的类型。

如果命令写成ALTER FOREIGN TABLE IF EXISTS ...而外部表不存在,则不会抛出错误。这种情况下会发出一个提示。

你必须拥有该表才能使用ALTER FOREIGN TABLE。要更改外部表的模式,你还必须在新模式上具有CREATE权限。要更改拥有者,你必须能够对新的所有者角色执行SET ROLE,并且该角色必须在该表所在模式上具有CREATE权限。(这些限制确保更改拥有者不会做出任何你无法通过删除并重新创建该表来完成的事情。不过,超级用户仍然可以更改任何表的所有权。)要添加列或更改列类型,你还必须在该数据类型上具有USAGE权限。

参数

name

要修改的现有外部表的名称(可以带模式限定)。如果在表名前指定了 ONLY,则只修改该表。如果未指定ONLY,则该表及其所有后代表(如果有)都会被修改。也可以在表名后指定 *,显式表示包括后代表。

column_name

新列或现有列的名称。

new_column_name

现有列的新名称。

new_name

表的新名称。

data_type

新列的数据类型,或现有列的新数据类型。

table_constraint

该外部表的新表约束。

constraint_name

要删除的现有约束的名称。

CASCADE

自动删除依赖于被删除列或约束的对象(例如引用该列的视图),以及所有进一步依赖于这些对象的对象(见第 5.15 节)。

RESTRICT

如果存在任何依赖对象,则拒绝删除该列或约束。这是默认行为。

trigger_name

要禁用或启用的单个触发器的名称。

ALL

禁用或启用属于该外部表的所有触发器。(如果其中任何触发器是内部生成的触发器,则需要超级用户权限。核心系统不会向外部表添加这类触发器,但附加代码可能会这么做。)

USER

禁用或启用属于该外部表的所有触发器,但内部生成的触发器除外。

parent_table

要与该外部表关联或解除关联的父表。

new_owner

该表的新拥有者的用户名。

new_schema

该表将被移动到的模式名称。

注解

关键字COLUMN不影响语义,可以省略。

使用ADD COLUMN或DROP COLUMN添加或移除列,添加NOT NULL或CHECK约束,或使用SET DATA TYPE更改列类型时,不会检查与外部服务器的一致性。用户有责任确保表定义与远端一致。

关于有效参数的进一步说明,请参见 CREATE FOREIGN TABLE。

示例

要把一列标记为非空:

ALTER FOREIGN TABLE distributors ALTER COLUMN street SET NOT NULL;

要更改外部表的选项:

ALTER FOREIGN TABLE myschema.distributors OPTIONS (ADD opt1 'value', SET opt2 'value2', DROP opt3);

兼容性

ADD、DROP和SET DATA TYPE 形式符合 SQL 标准。其他形式是 PostgreSQL对 SQL 标准的扩展。另外,在单条ALTER FOREIGN TABLE命令中指定多个修改也是一种扩展。

ALTER FOREIGN TABLE DROP COLUMN可用于删除外部表的唯一一列,从而留下一个零列的表。这是 SQL 的一种扩展,因为 SQL 不允许零列外部表。

另见

CREATE FOREIGN TABLE, DROP FOREIGN TABLE

比较版本

完整来源事实

synopsis html

ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] <em class="replaceable"><code>name</code></em> [ * ]
    <em class="replaceable"><code>action</code></em> [, ... ]
ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] <em class="replaceable"><code>name</code></em> [ * ]
    RENAME [ COLUMN ] <em class="replaceable"><code>column_name</code></em> TO <em class="replaceable"><code>new_column_name</code></em>
ALTER FOREIGN TABLE [ IF EXISTS ] <em class="replaceable"><code>name</code></em>
    RENAME TO <em class="replaceable"><code>new_name</code></em>
ALTER FOREIGN TABLE [ IF EXISTS ] <em class="replaceable"><code>name</code></em>
    SET SCHEMA <em class="replaceable"><code>new_schema</code></em>

<span class="phrase">where <em class="replaceable"><code>action</code></em> is one of:</span>

    ADD [ COLUMN ] [ IF NOT EXISTS ] <em class="replaceable"><code>column_name</code></em> <em class="replaceable"><code>data_type</code></em> [ COLLATE <em class="replaceable"><code>collation</code></em> ] [ <em class="replaceable"><code>column_constraint</code></em> [ ... ] ]
    DROP [ COLUMN ] [ IF EXISTS ] <em class="replaceable"><code>column_name</code></em> [ RESTRICT | CASCADE ]
    ALTER [ COLUMN ] <em class="replaceable"><code>column_name</code></em> [ SET DATA ] TYPE <em class="replaceable"><code>data_type</code></em> [ COLLATE <em class="replaceable"><code>collation</code></em> ]
    ALTER [ COLUMN ] <em class="replaceable"><code>column_name</code></em> SET DEFAULT <em class="replaceable"><code>expression</code></em>
    ALTER [ COLUMN ] <em class="replaceable"><code>column_name</code></em> DROP DEFAULT
    ALTER [ COLUMN ] <em class="replaceable"><code>column_name</code></em> { SET | DROP } NOT NULL
    ALTER [ COLUMN ] <em class="replaceable"><code>column_name</code></em> SET STATISTICS <em class="replaceable"><code>integer</code></em>
    ALTER [ COLUMN ] <em class="replaceable"><code>column_name</code></em> SET ( <em class="replaceable"><code>attribute_option</code></em> = <em class="replaceable"><code>value</code></em> [, ... ] )
    ALTER [ COLUMN ] <em class="replaceable"><code>column_name</code></em> RESET ( <em class="replaceable"><code>attribute_option</code></em> [, ... ] )
    ALTER [ COLUMN ] <em class="replaceable"><code>column_name</code></em> SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }
    ALTER [ COLUMN ] <em class="replaceable"><code>column_name</code></em> OPTIONS ( [ ADD | SET | DROP ] <em class="replaceable"><code>option</code></em> ['<em class="replaceable"><code>value</code></em>'] [, ... ])
    ADD <em class="replaceable"><code>table_constraint</code></em> [ NOT VALID ]
    VALIDATE CONSTRAINT <em class="replaceable"><code>constraint_name</code></em>
    DROP CONSTRAINT [ IF EXISTS ]  <em class="replaceable"><code>constraint_name</code></em> [ RESTRICT | CASCADE ]
    DISABLE TRIGGER [ <em class="replaceable"><code>trigger_name</code></em> | ALL | USER ]
    ENABLE TRIGGER [ <em class="replaceable"><code>trigger_name</code></em> | ALL | USER ]
    ENABLE REPLICA TRIGGER <em class="replaceable"><code>trigger_name</code></em>
    ENABLE ALWAYS TRIGGER <em class="replaceable"><code>trigger_name</code></em>
    SET WITHOUT OIDS
    INHERIT <em class="replaceable"><code>parent_table</code></em>
    NO INHERIT <em class="replaceable"><code>parent_table</code></em>
    OWNER TO { <em class="replaceable"><code>new_owner</code></em> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
    OPTIONS ( [ ADD | SET | DROP ] <em class="replaceable"><code>option</code></em> ['<em class="replaceable"><code>value</code></em>'] [, ... ])

synopsis text

ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
action [, ... ]
ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
RENAME [ COLUMN ] column_name TO new_column_name
ALTER FOREIGN TABLE [ IF EXISTS ] name
RENAME TO new_name
ALTER FOREIGN TABLE [ IF EXISTS ] name
SET SCHEMA new_schema
where action is one of:

ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ]
DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ]
ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type [ COLLATE collation ]
ALTER [ COLUMN ] column_name SET DEFAULT expression
ALTER [ COLUMN ] column_name DROP DEFAULT
ALTER [ COLUMN ] column_name { SET | DROP } NOT NULL
ALTER [ COLUMN ] column_name SET STATISTICS integer
ALTER [ COLUMN ] column_name SET ( attribute_option = value [, ... ] )
ALTER [ COLUMN ] column_name RESET ( attribute_option [, ... ] )
ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }
ALTER [ COLUMN ] column_name OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ])
ADD table_constraint [ NOT VALID ]
VALIDATE CONSTRAINT constraint_name
DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ]
DISABLE TRIGGER [ trigger_name | ALL | USER ]
ENABLE TRIGGER [ trigger_name | ALL | USER ]
ENABLE REPLICA TRIGGER trigger_name
ENABLE ALWAYS TRIGGER trigger_name
SET WITHOUT OIDS
INHERIT parent_table
NO INHERIT parent_table
OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ])

来源引用

完整定义与证据 JSON

定义来源

center · PostgreSQL 18 · a709ab85

正文语言: zh-Hans · 1b5ca64c