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
其中 action 是以下之一:
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 }
说明
ALTER FOREIGN TABLE 更改现有外表的定义。有几个子表单:
ADD COLUMN
此表单使用与 CREATE FOREIGN TABLE相同的语法向外表添加新列。与向常规表添加列的情况不同,底层存储没有任何反应:此操作只是声明现在可以通过外表访问某些新列。
DROP COLUMN [ IF EXISTS ]
此表单从外表中删除列。如果表外的任何内容取决于列,您将需要说 CASCADE;例如,观点。如果指定 IF EXISTS且该列不存在,则不会引发错误。在这种情况下,会发出通知。
SET DATA TYPE
此表单更改外表的列的类型。同样,这对任何底层存储都没有影响:此操作只是更改Vastbase E100认为该列具有的类型。
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 这些表单配置触发属于外表的触发器。有关详细信息,请参阅 ALTERTABLE的类似表格。
SET WITH OIDS
此表单将 oid系统列添加到表中。如果表已经有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 权限。
参数说明
name
要更改的现有外部表的名称(可能是模式限定的)。如果在表名之前指定了 ONLY,则仅更改该表。如果未指定 ONLY ,则更改表及其所有后代表(如果有)。(可选)可以在表名后指定 * 以明确指示包含后代表。
column_name
新列或现有列的名称。
new_column_name
现有列的新名称。
new_name
表的新名称。
data_type
新列的数据类型,或现有列的新数据类型。
table_constraint
外表的新表约束。
constraint_name
要删除的现有约束的名称。
CASCADE
自动删除依赖于已删除列或约束的对象(例如,引用该列的视图),以及依赖于这些对象的所有对象。
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 。
示例
要将列标记为非null:
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');