ALTER FOREIGN TABLE

From PostgreSQL wiki
Jump to navigationJump to search
名称

ALTER FOREIGN TABLE -- 修改一个外部表的定义

语法概要
   ALTER FOREIGN TABLE name
       action [, ... ]
   ALTER FOREIGN TABLE name
       RENAME [ COLUMN ] column TO new_column
   ALTER FOREIGN TABLE name
       RENAME TO new_name
   ALTER FOREIGN TABLE name
       SET SCHEMA new_schema
   
   where action is one of:
   
       ADD [ COLUMN ] column type [ NULL | NOT NULL ]
       DROP [ COLUMN ] [ IF EXISTS ] column [ RESTRICT | CASCADE ]
       ALTER [ COLUMN ] column [ SET DATA ] TYPE type
       ALTER [ COLUMN ] column { SET | DROP } NOT NULL
       OWNER TO new_owner
       OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ])
描述

ALTER FOREIGN TABLE 修改一个外部表的定义。有以下几种形式:

ADD COLUMN
这个形式向外部表中添加一个新列,语法同CREATE FOREIGN TABLE.
DROP COLUMN [ IF EXISTS ]
这个形式从外部表中丢弃一个列。如果表中的该数据列被其他地方依赖,那就需要CASCADE;比如依赖该数据列的视图。如果指定的有 IF EXISTS 字句,则在数据列不存在时也不会报错,只是会发出一个通告。
SET DATA TYPE
这个形式修改外部表数据列的类型。
SET/DROP NOT NULL
允许或禁止数据列可以存为null值。
OWNER
这个形式将外部表的所有者修改成另一个用户。
RENAME
修改外部表的名字,或者外部表内部单独某个数据列的名字。
SET SCHEMA
这个形式将外部表移动到另一个模式中。
OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ] )
改变外部表的选项。ADD, SET, 和DROP 指定执行的操作。如果没有显示设置操作,那么默认就是ADD。 选项名字必须唯一;名字和值也都会通过外部数据封装库进行验证。

除 RENAME 和SET SCHEMA 之外的操作都可以写在组合在一起,一次执行多个操作。例如,在单一一条命令中,可以添加多个列和(或者)修改多个列的数据类型。

你必须是表的所有者才能使用 ALTER FOREIGN TABLE 命令。要修改外部表的模式,必须在被修改的新模式中拥有CREATE权限。要改变外部表的所有权,你必须是新角色的直接或间接成员,并且这个新角色必须在该表的模式上具有 CREATE 权限。(这强制限制在进行更改所有者的操作时,如果无法通过删除后重建表的方式完成,那么就不能做任何事。不过,超级用户可以用任何方法任意更改表的所有者。)

参数
name
要修改的已有外部表的名字(可以有模式修饰)。
column
新建或已有数据列名称。
new_column
已有数据列的新名字。
new_name
表的新名字。
type
新数据列的数据类型,或者已有数据列的新类型。
CASCADE
丢弃数据列的同时自动丢弃那些依赖该列的对象(例如引用该列的视图)。
RESTRICT
如果有该列的依赖存在,就拒绝丢弃该列。这是默认行为。
new_owner
表的新所有者的用户名。
new_schema
被移动表进来的模式名称。
注意

关键字 COLUMN 没用,可以被忽略。

列通过ADD COLUMN和DROP COLUMN进行添加或修改,通过添加NOT NULL进行约束,或通过SET DATA TYPE改变数据类型之后,不会检查数据一致性。确保表定义和远端表定义相匹配是用户的责任。

参见CREATE FOREIGN TABLE关于可用参数的更多信息。

示例

设置数据列为 not-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');
兼容性

ADD,DROP 和 SET DATA TYPE 这三种形式符合SQL标准。其他形式是PostgreSQL的扩展。另外,一个ALTER FOREIGN TABLE命令中设置多个操作的能力也是扩展。

ALTER FOREIGN TABLE DROP COLUMN 可以删除外部表中的仅有的唯一一个列,删除之后就是一个无数据列的表。这个特性是PostgreSQL的扩展,标准SQL中不允许无数据列的表。