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中不允许无数据列的表。