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这些表单设置或移除列的默认值。默认值仅适用于后续的
INSERT或UPDATE命令;它们不会导致表中已有的行发生更改。SET/DROP NOT NULL将列标记为允许或不允许空值。
SET STATISTICS此表单设置后续
ANALYZE操作的每列统计信息收集目标。有关更多详细信息,请参阅ALTER TABLE的类似表单。SET (attribute_option=value[, ... ] )RESET (attribute_option[, ... ] )此表单设置或重置每个属性的选项。有关更多详细信息,请参阅
ALTER TABLE的类似表单。SET STORAGE此表单设置列的存储模式。有关更多详细信息,请参阅
ALTER TABLE的类似表单。请注意,除非表的外部数据包装器选择关注存储模式,否则存储模式不会产生任何影响。ADDtable_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系统列,因此这永远不会产生任何效果。INHERITparent_table此表单将目标外键表作为指定父表的新的子表添加。有关更多详细信息,请参阅
ALTER TABLE的类似表单。NO INHERITparent_table此表单将目标外键表从指定父表的子表列表中删除。
OWNER此表单将外键表的所有者更改为指定的用户。
OPTIONS ( [ ADD | SET | DROP ]option['value'] [, ... ] )更改外键表或其某一列的选项。
ADD、SET和DROP指定要执行的操作。如果未明确指定操作,则假定为ADD。不允许重复的选项名称(尽管表选项和列选项具有相同的名称是可以的)。选项名称和值也使用外来数据包装器库进行验证。RENAMERENAME表单更改外键表的名称或外键表中单个列的名称。设置模式此表单将外部表移动到另一个模式中。
除RENAME和SET SCHEMA之外的所有操作都可以组合到一个列表中,以便并行应用多个更改。例如,可以在单个命令中添加多个列和/或更改多个列的类型。
如果命令写为ALTER FOREIGN TABLE IF EXISTS ...并且外部表不存在,则不会引发错误。在这种情况下会发出通知。
您必须拥有该表才能使用ALTER FOREIGN TABLE。要更改外部表的模式,您还必须对新模式拥有CREATE权限。要更改所有者,您必须能够将SET ROLE设置为新的所有者角色,并且该角色必须对表的模式拥有CREATE权限。(这些限制强制要求更改所有者不会执行通过删除和重新创建表无法执行的任何操作。但是,超级用户无论如何都可以更改任何表的拥有权。)要添加列或更改列类型,您还必须对数据类型拥有USAGE权限。
参数
名称要更改的现有外部表的名称(可能是模式限定的)。如果在表名前指定
ONLY,则只更改该表。如果未指定ONLY,则更改该表及其所有后代表(如果存在)。或者,可以在表名后指定*以明确表示包括后代表。列名新列或现有列的名称。
新列名现有列的新名称。
新名称表的名称。
数据类型新列的数据类型,或现有列的新数据类型。
表约束外部表的新表约束。
约束名称要删除的现有约束的名称。
级联自动删除依赖于已删除列或约束的对象(例如,引用该列的视图),以及依次删除所有依赖于这些对象的(请参阅 第 5.14 节)。
限制如果存在任何依赖对象,则拒绝删除列或约束。这是默认行为。
触发器名称要禁用或启用的单个触发器的名称。
全部禁用或启用属于外部表的所有触发器。(如果任何触发器是内部生成的触发器,则需要超级用户权限。核心系统不会向外部表添加此类触发器,但附加代码可以这样做。)
用户禁用或启用属于外部表的所有触发器,但内部生成的触发器除外。
父表与该外部表关联或取消关联的父表。
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 不允许零列外部表。
