ALTER FOREIGN TABLE — 更改外部表的定义
ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ]name
[ * ]action
[, ... ] ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ]name
[ * ] RENAME [ COLUMN ]column_name
TOnew_column_name
ALTER FOREIGN TABLE [ IF EXISTS ]name
RENAME TOnew_name
ALTER FOREIGN TABLE [ IF EXISTS ]name
SET SCHEMAnew_schema
whereaction
is one of: ADD [ COLUMN ]column_name
data_type
[ COLLATEcollation
] [column_constraint
[ ... ] ] DROP [ COLUMN ] [ IF EXISTS ]column_name
[ RESTRICT | CASCADE ] ALTER [ COLUMN ]column_name
[ SET DATA ] TYPEdata_type
[ COLLATEcollation
] ALTER [ COLUMN ]column_name
SET DEFAULTexpression
ALTER [ COLUMN ]column_name
DROP DEFAULT ALTER [ COLUMN ]column_name
{ SET | DROP } NOT NULL ALTER [ COLUMN ]column_name
SET STATISTICSinteger
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
'] [, ... ]) ADDtable_constraint
[ NOT VALID ] VALIDATE CONSTRAINTconstraint_name
DROP CONSTRAINT [ IF EXISTS ]constraint_name
[ RESTRICT | CASCADE ] DISABLE TRIGGER [trigger_name
| ALL | USER ] ENABLE TRIGGER [trigger_name
| ALL | USER ] ENABLE REPLICA TRIGGERtrigger_name
ENABLE ALWAYS TRIGGERtrigger_name
SET WITHOUT OIDS INHERITparent_table
NO INHERITparent_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
这些形式设置或删除列的默认值。默认值仅适用于随后的 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
约束。
与向常规表添加约束的情况不同,不会执行任何操作来验证该约束是否正确;相反,此操作仅仅声明一些新的条件应该适用于外表的全部行。(请参阅 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
'] [, ... ] )
更改外键表或其某列的选项。 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 的扩展,不允许零栏外来表格。