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');