Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

ALTER FOREIGN TABLE

ALTER FOREIGN TABLE — 更改外部表的定义

概要

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 ] 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

此形式使用与 CREATE FOREIGN TABLE 相同的语法向外部表中添加一个新列。与将列添加到常规表不同,对底层存储不会产生任何影响;此操作仅宣布现在可以通过外部表访问一些新列。

DROP COLUMN [IF EXISTS]

此形式从外部表中删除一个列。如果表外有任何内容依赖于此列,您将需要声明 CASCADE;例如,视图。如果指定了 IF EXISTS 且不存在此列,则不会引发错误。在此情况下,将发出一个通知。

SET DATA TYPE

此表单更改外表的列类型。同样,这不影响任何底层存储:此操作只是更改 PostgreSQL 认为列拥有的类型。

SET/DROP DEFAULT

这些形式设置或删除列的默认值。默认值仅适用于随后的 INSERTUPDATE 命令;它们不会导致表中已有的行发生更改。

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 约束。

与向常规表添加约束的情况不同,不会执行任何操作来验证该约束是否正确;相反,此操作仅仅声明一些新的条件应该适用于外表的全部行。(请参阅 CREATE FOREIGN TABLE 中的讨论。)如果该约束标记为 NOT VALID,则无需假定它成立,而是仅记录下来以便将来可能使用。

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'] [, ... ] )

更改外键表或其某列的选项。 ADDSETDROP 指定要执行的操作。如果未明确指定操作,则假定为 ADD。不允许出现重复的选项名称(尽管表选项和列选项具有相同的名称是可以的)。选项名称和值也使用外部数据封装库进行验证。

RENAME

RENAME 表单更改外键表的名称或外键表中某一列的名称。

SET SCHEMA

此表单将外键表移动到其他架构中。

除了 RENAMESET 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 COLUMNDROP COLUMN 添加或删除一栏、添加 NOT NULLCHECK 约束,或使用 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);

兼容性

ADDDROPSET DATA TYPE 的形式符合 SQL 标准。其他形式是 PostgreSQL 对 SQL 标准的扩展。此外,在单个 ALTER FOREIGN TABLE 命令中指定多个操作的能力也是扩展。

ALTER FOREIGN TABLE DROP COLUMN 可用于删除外来表格的唯一一栏,留下一个零栏表格。这是对 SQL 的扩展,不允许零栏外来表格。

另请参见

CREATE FOREIGN TABLEDROP FOREIGN TABLE