On this page
更改外表
ALTER FOREIGN TABLE —更改外部表的定义
Synopsis
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 }
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 WITH OIDS
SET WITHOUT OIDS
INHERIT parent_table
NO INHERIT parent_table
OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ])
Description
ALTER FOREIGN TABLE更改现有外部表的定义。有几个子窗体:
ADD COLUMN- 此表单使用与创建外表相同的语法向外部表添加新列。与将列添加到常规表的情况不同,底层存储没有任何反应:此操作只是声明现在可以通过外部表访问某些新列。
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 ]- 此表单使用与创建外表相同的语法向外部表添加新约束。当前仅支持
CHECK个约束。
- 此表单使用与创建外表相同的语法向外部表添加新约束。当前仅支持
与将约束添加到常规表的情况不同,没有做任何事情来验证约束是正确的。相反,此操作只是声明应假定某些新条件适用于外表中的所有行。 (请参阅创建外表中的讨论。)如果约束标记为NOT VALID,则不假定该约束成立,而仅记录下来以备将来使用。
VALIDATE CONSTRAINT- 此表单将先前标记为
NOT VALID的约束标记为有效。不会采取任何措施来验证约束,但是以后的查询将假定该约束成立。
- 此表单将先前标记为
DROP CONSTRAINT [ IF EXISTS ]- 此表单将指定的约束放在外部表上。如果指定
IF EXISTS且该约束不存在,则不会引发任何错误。在这种情况下,将发出通知。
- 此表单将指定的约束放在外部表上。如果指定
DISABLE/ENABLE [ REPLICA | ALWAYS ] TRIGGER- 这些表格配置了属于外部表的触发器的触发。有关更多详细信息,请参见ALTER TABLE的类似形式。
SET WITH OIDS- 此表单将
oid系统列添加到表中(请参见Section 5.4)。如果表已具有 OID,则不执行任何操作。除非表的外部数据包装器支持 OID,否则此列将简单地读取为零。
- 此表单将
请注意,这不等于ADD COLUMN oid oid;会添加一个恰好名为oid的普通列,而不是系统列。
SET WITHOUT OIDS- 此表单从表中删除
oid系统列。这与DROP COLUMN oid RESTRICT完全等效,除了如果已经没有oid列时它不会抱怨。
- 此表单从表中删除
INHERIT parent_table- 此表单将目标外部表添加为指定父表的新子表。有关更多详细信息,请参见ALTER TABLE的类似形式。
NO INHERIT parent_table- 该表格从指定父表的子表中删除目标外表。
OWNER- 此表单将外部表的所有者更改为指定的用户。
OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ] )- 更改外部表或其列之一的选项。
ADD,SET和DROP指定要执行的动作。如果未明确指定任何操作,则假定ADD。不允许使用重复的选项名称(尽管表选项和列选项具有相同的名称是可以的)。选项名称和值也使用外部数据包装器库进行验证。
- 更改外部表或其列之一的选项。
RENAMERENAME表单更改外部表的名称或外部表中单个列的名称。
SET SCHEMA- 这种形式将外部表移动到另一个模式。
RENAME和SET SCHEMA以外的所有动作都可以组合成多个更改列表以并行应用。例如,可以在单个命令中添加几列和/或更改几列的类型。
如果命令写为ALTER FOREIGN TABLE IF EXISTS ...并且外部表不存在,则不会引发任何错误。在这种情况下发出通知。
您必须拥有该表才能使用ALTER FOREIGN TABLE。要更改外部表的架构,您还必须对新架构具有CREATE特权。要更改所有者,您还必须是新拥有角色的直接或间接成员,并且该角色在表的架构上必须具有CREATE特权。 (这些限制规定,更改所有者不会通过删除并重新创建表来执行您无法做的任何事情.但是,超级用户仍然可以更改任何表的所有权.)要添加列或更改列类型,您必须在数据类型上也具有USAGE特权。
Parameters
name- 要更改的现有外部表的名称(可能是模式限定的)。如果在表名之前指定了
ONLY,则仅更改该表。如果未指定ONLY,则该表及其所有后代表(如果有)将被更改。 (可选)可以在表名称后指定*,以明确指示包括后代表。
- 要更改的现有外部表的名称(可能是模式限定的)。如果在表名之前指定了
column_name- 新列或现有列的名称。
new_column_name- 现有列的新名称。
new_name- 表格的新名称。
data_type- 新列的数据类型,或现有列的新数据类型。
table_constraint- 外部表的新表约束。
constraint_name- 要删除的现有约束的名称。
CASCADE- 自动删除依赖于所删除的列或约束的对象(例如,引用该列的视图),并依次删除所有依赖于那些对象的对象(请参见Section 5.13)。
RESTRICT- 如果有任何相关对象,则拒绝删除列或约束。这是默认行为。
trigger_name- 要禁用或启用的单个触发器的名称。
ALL- 禁用或启用属于外部表的所有触发器。 (如果任何触发器是内部生成的触发器,则这需要超级用户特权.核心系统不会将此类触发器添加到外部表中,但是附加代码可以这样做.)
USER- 禁用或启用属于外部表的所有触发器(内部生成的触发器除外)。
parent_table- 父表要与此外部表关联或解除关联。
new_owner- 表的新所有者的用户名。
new_schema- 表将被移动到的模式的名称。
Notes
关键字COLUMN是噪音,可以省略。
当使用ADD COLUMN或DROP COLUMN添加或删除列,添加NOT NULL或CHECK约束或使用SET DATA TYPE更改列类型时,不检查与外部服务器的一致性。用户有责任确保表定义与远程端匹配。
有关有效参数的进一步说明,请参见创建外表。
Examples
要将列标记为非空:
ALTER FOREIGN TABLE distributors ALTER COLUMN street SET NOT NULL;
要更改外表的选项:
ALTER FOREIGN TABLE myschema.distributors OPTIONS (ADD opt1 'value', SET opt2 'value2', DROP opt3 'value3');
Compatibility
形式ADD,DROP和SET DATA TYPE符合 SQL 标准。其他形式是 SQL 标准的 PostgreSQL 扩展。同样,在单个ALTER FOREIGN TABLE命令中指定多个操纵的功能也是一种扩展。
ALTER FOREIGN TABLE DROP COLUMN可用于删除外部表的唯一列,而保留零列表。这是 SQL 的扩展,不允许使用零列外部表。