ALTER FOREIGN TABLE [ IF EXISTS ] name
action [, ... ]
ALTER FOREIGN TABLE [ IF EXISTS ] 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
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 OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ])
DISABLE TRIGGER [ trigger_name | ALL | USER ]
ENABLE TRIGGER [ trigger_name | ALL | USER ]
ENABLE REPLICA TRIGGER trigger_name
ENABLE ALWAYS TRIGGER trigger_name
OWNER TO new_owner
OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ])
ALTER FOREIGN TABLE更改一个现有外部表的定义。 有几种子形式:
这种形式使用与CREATE FOREIGN TABLE相同的语法把 一个新的列增加到该外部表。和为常规表增加一列不同,这种形式并不影响底层 的存储:这个动作只是简单地声明通过该外部表可以访问某个新的列而已。
这种形式从一个外部表删掉一列。如果在该表外部有任何东西依赖于该列, 你将需要写上CASCADE,典型的例子就是视图。如果指定了 IF EXISTS并且该列不存在,将不会抛出错误。在这种 情况下会转而发出一个提示。
如果该外部表不存在则不抛出一个错误。这种情况下会发出一个提示。
这种形式更改一个外部表的一列的类型。
这些形式设置或者移除一列的默认值。默认值只会应用于后续的 INSERT或UPDATE命令,它们 不会导致已经在表中的行被更改。
把一列标记为允许或者不允许空值。
这种形式为后续的ANALYZE操作设置针对每列 的统计收集目标。详见ALTER TABLE的类似形式。
这种形式设置或重置针对每个属性的选项。详见ALTER TABLE 的类似形式。
这些形式配置属于该外部表的触发器的触发情况。详见 ALTER TABLE的类似形式。
这种形式把该外部表的拥有者改成指定的用户。
RENAME形式更改一个外部表的名称或者其中一个 列的名称。
这种形式把该外部表移动到另一个模式。
更改该外部表或者其中一个列的选项。ADD、SET 以及DROP指定要执行的动作。如果没有显式地指定操作,将假定 为ADD。不允许重复的名称(不过一个表选项和一个列选项可以重 名)。选项名称和值也会用外部数据包装器库来验证。
所有除了RENAME和SET SCHEMA的 动作都能被整合到一个多修改列表以便能被并行应用。例如,可以在一个 命令中增加几个列并且/或者修改几个列的类型。
你必须拥有该表以使用ALTER FOREIGN TABLE。要更改一个 外部表的模式,你必须还拥有新模式上的CREATE特权。要 更改拥有者,你还必须是新拥有角色的一个直接或者间接成员,并且该角色必须 具有在该表的模式上的CREATE特权(这些限制强制修改拥有 者不能做一些通过删除和重建该表做不到的事情。不过,一个超级用户怎么都能 更改任何表的所有权)。要增加一列或者修改一个列的类型,你还必须具有该数 据类型上的USAGE特权。
一个要修改的现有外部表的名称(可以被模式限定)。
一个新的或者现有列的名称。
一个现有列的新名称。
该表的新名称。
新列的数据类型或者一个现有列的新数据类型。
自动删除依赖于被删除列的对象(例如,引用该列的视图)。
如果有任何依赖对象就拒绝删除该列。这是默认行为。
要禁用或启用的一个触发器的名称。
禁用或者启用所有属于该外部表的触发器(如果任何触发器是内部生成 的触发器,这都要求超级用户特权。核心系统不会向外部表增加这类触发 器,但是附加代码会这样做。)。
禁用或者启用属于该外部表的除了内部生成的触发器之外的所有触发器。
该表的新拥有者的用户名。
该表要被移动到其中的模式的名称。
关键词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');