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 权限。(这强制限制在进行更改所有者的操作时,如果无法通过删除后重建表的方式完成,那么就不能做任何事。不过,超级用户可以用任何方法任意更改表的所有者。)
要修改的已有外部表的名字(可以有模式修饰)。
-
column
-
新建或已有数据列名称。
-
new_column
-
已有数据列的新名字。
-
new_name
-
表的新名字。
新数据列的数据类型,或者已有数据列的新类型。
-
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中不允许无数据列的表。