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
。不允许使用重复的选项名称(尽管表选项和列选项具有相同的名称是可以的)。选项名称和值也使用外部数据包装器库进行验证。
- 更改外部表或其列之一的选项。
RENAME
RENAME
表单更改外部表的名称或外部表中单个列的名称。
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 的扩展,不允许使用零列外部表。