pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
ALTER FOREIGN TABLE — 更改外部表的定义
ALTER FOREIGN TABLE [ IF EXISTS ]nameaction[, ... ] ALTER FOREIGN TABLE [ IF EXISTS ]nameRENAME [ COLUMN ]column_nameTOnew_column_nameALTER FOREIGN TABLE [ IF EXISTS ]nameRENAME TOnew_nameALTER FOREIGN TABLE [ IF EXISTS ]nameSET SCHEMAnew_schema其中action为以下之一: ADD [ COLUMN ]column_namedata_type[ COLLATEcollation] [column_constraint[ ... ] ] DROP [ COLUMN ] [ IF EXISTS ]column_name[ RESTRICT | CASCADE ] ALTER [ COLUMN ]column_name[ SET DATA ] TYPEdata_typeALTER [ COLUMN ]column_nameSET DEFAULTexpressionALTER [ COLUMN ]column_nameDROP DEFAULT ALTER [ COLUMN ]column_name{ SET | DROP } NOT NULL ALTER [ COLUMN ]column_nameSET STATISTICSintegerALTER [ COLUMN ]column_nameSET (attribute_option=value[, ... ] ) ALTER [ COLUMN ]column_nameRESET (attribute_option[, ... ] ) ALTER [ COLUMN ]column_nameOPTIONS ( [ ADD | SET | DROP ]option['value'] [, ... ]) DISABLE TRIGGER [trigger_name| ALL | USER ] ENABLE TRIGGER [trigger_name| ALL | USER ] ENABLE REPLICA TRIGGERtrigger_nameENABLE ALWAYS TRIGGERtrigger_nameOWNER TOnew_ownerOPTIONS ( [ ADD | SET | DROP ]option['value'] [, ... ])
ALTER FOREIGN TABLE更改现有外部表的定义。有几种子形式:
ADD COLUMN该形式使用与CREATE FOREIGN TABLE相同的语法向外部表添加一个新列。与向普通表添加列的情况不同,底层存储不会发生任何变化;该操作只是声明现在可以通过外部表访问某个新列。
DROP COLUMN [ IF EXISTS ]该形式从外部表中删除一列。如果该表之外的任何对象依赖于该列,例如视图, 则需要指定CASCADE。如果指定了IF EXISTS 而该列不存在,则不会抛出错误,而是改为发出一条提示。
IF EXISTS如果外部表不存在,则不抛出错误。这种情况下会发出一个提示。
SET DATA TYPE该形式更改外部表中一列的类型。
SET/DROP DEFAULT这些形式为列设置或移除默认值。默认值只会应用于后续的 INSERT或UPDATE命令; 它们不会导致表中已有的行发生变化。
SET/DROP NOT NULL把一列标记为允许或不允许空值。
SET STATISTICS该形式为后续 ANALYZE操作设置每列的统计信息收集目标。 详见ALTER TABLE的类似形式。
SET ( attribute_option = value [, ... ] )RESET ( attribute_option [, ... ] )该形式设置或重置每个属性的选项。 详见ALTER TABLE的类似形式。
DISABLE/ENABLE [ REPLICA | ALWAYS ] TRIGGER这些形式配置属于外部表的触发器的触发。更多详情参见ALTER TABLE的类似形式。
OWNER该形式把外部表的拥有者更改为指定用户。
OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ] )更改外部表或其某一列的选项。ADD、SET 和DROP指定要执行的动作。如果没有显式指定操作,则默认是 ADD。不允许重复的选项名(不过表选项和列选项同名是可以的)。 选项名和值也会通过外部数据包装器库进行验证。
RENAMERENAME形式更改外部表的名称,或者更改其中某一列的名称。
SET SCHEMA该形式把外部表移动到另一个模式中。
除了RENAME和SET SCHEMA之外,所有动作都可以组合在一个包含多项修改的列表中一并应用。 例如,可以在一条命令中添加多个列和/或更改多个列的类型。
要使用ALTER FOREIGN TABLE,必须拥有该表。要更改外部表的模式,还必须在新模式上拥有CREATE权限。要更改所有者,还必须是新所有者角色的直接或间接成员,并且该角色必须在表所在模式上拥有CREATE权限。(这些限制确保更改所有者不会执行任何无法通过删除并重新创建该表完成的操作。不过,超级用户无论如何都可以更改任何表的所有权。)要添加列或更改列类型,还必须在数据类型上拥有USAGE权限。
name要修改的现有外部表的名称(可以带模式限定)。
column_name新列或现有列的名称。
new_column_name现有列的新名称。
new_name表的新名称。
data_type新列的数据类型,或现有列的新数据类型。
CASCADE自动删除依赖于该列的对象(例如引用该列的视图)。
RESTRICT如果存在任何依赖对象,则拒绝删除该列。这是默认行为。
trigger_name要禁用或启用的单个触发器的名称。
ALL禁用或启用属于该外部表的所有触发器。(如果其中任何触发器是内部生成的触发器, 则需要超级用户权限。核心系统不会向外部表添加这类触发器,但附加代码可能会这么做。)
USER禁用或启用属于该外部表的所有触发器,但内部生成的触发器除外。
new_owner该表的新拥有者的用户名。
new_schema该表将被移动到的模式名称。
关键字COLUMN只是噪声,可以省略。
使用ADD COLUMN或DROP COLUMN添加或移除列, 添加NOT NULL约束, 或使用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 'value3');
ADD、DROP和SET DATA TYPE 形式符合 SQL 标准。其他形式是 PostgreSQL对 SQL 标准的扩展。 另外,在单条ALTER FOREIGN TABLE命令中指定多个修改也是一种扩展。
ALTER FOREIGN TABLE DROP COLUMN可用于删除外部表的唯一一列, 从而留下一个零列的表。这是 SQL 的一种扩展,因为 SQL 不允许零列外部表。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。