ALTER FOREIGN TABLE
ALTER FOREIGN TABLE¶
修改外部表的定义。
- 语法
- ``` sql
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`是下列中的一个: ``` sql ADD [ COLUMN ] column_name column_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
修改一个已存在的外部表的定义,命令有以下的几种形式:ADD COLUMN
- 这种方式往外部表中新增一列,和
CREATE FOREIGN TABLE
使用相同的语法。这个不像往通常的表中新加一列,它其实在存储层面不做任何操作,仅仅只是往现在访问的外部表中定义了一些新列。 DROP COLUMN [ IF EXISTS ]
- 这种形式从外部表中删除一列,如果有表之外的其他对象,比如说视图依赖于此列,必须指定
CASCADE
关键字。如果指定了IF EXISTS
关键字而这个列不存在,SeaboxMPP数据库只会产生一个提醒而不是抛出错误。 IF EXISTS
- 如果指定了
IF EXISTS
关键字而外部表不存在,SeaboxMPP数据库只会产生一个提醒而不是抛出错误。 SET DATA TYPE
- 这种形式修改外部表中一列的类型。
SET/DROP DEFAULT
- 这种形式设置或者删除了列的默认值,默认值只会应用在随后的
INSERT
或者UPDATE
命令;不会触发那些表中已经存在的行做修改。 SET/DROP NOT NULL
- 标志一个列允许或者不允许空值。
SET STATISTICS
- 这种形式为随后的
ANALYZE
操作设置每列的统计信息收集目标。更多细节参考ALTER TABLE
中类似的形式。 SET ( attribute_option = value [, ...] )
|RESET ( attribute_option [, ... ] )
- 这种形式设置或者重置了每个属性的选项。更多细节参考
ALTER TABLE
中类似的形式。 DISABLE/ENABLE [ REPLICA | ALWAYS ] TRIGGER
- 这些形式配置了触发那些属于外部表的触发器。
OWNER
- 这种形式修改外部表的所有者为指定的用户。
RENAME
RENAME
修改一个外部表的名字或者外部表中个别列的名字。SET SCHEMA
- 这种形式将外部表移到其他的模式下。
OPTIONS ( [ ADD | SET | DROP ]
option ['value'] [, ... ])
- 为外部表修改选项。
ADD
,SET
和DROP
指定了要执行的操作。 如果没有明确指出操作,默认的操作是ADD
。选项名必须是唯一的。SeaboxMPP数据库用外部数据包装器来验证名字和值。
你可以将除
RENAME
和SET SCHEMA
之外的所有操作写在一个列表里让SeaboxMPP数据库来并行的应用这些修改。比如,可以在一个命令中增加多列或者修改多列的属性。你必须是拥有这个表才能使用
ALTER FOREIGN TABLE
操作。为了修改外部表的模式,你还必须在新的模式下拥有CREATE
的权限。为了修改所有者,你必须是新的角色的直接或者间接成员,而且那个角色必须在表的模式下拥有CREATE
权限。(这些限制强制要求通过删除和重新创建表来更改所有者不会执行任何操作。但是,超级用户无论如何都可以更改任何表的所有权。)为了新增或者修改一个列的类型,你必须在数据类型上拥有USAGE
权限。 - 参数
-
该SQL命令参数说明见下
name
- 要更改的现有外部表的名称(可能是模式限定的)。
column_name
- 新的或者已存在的列的名称。
new_column_name
- 已存在的列的新名称
new_name
- 外部表的新的名称。
data_type
- 新的列的数据类型,或者已存在的列的新数据类型。
CASCADE
- 自动删除依赖于要删除列的对象(比如说,关联到列的视图)。
RESTRICT
- 拒绝删除有任何对象依赖的列。这是默认的表现。
trigger_name
- 要启用或者禁用的单个触发器名称。
ALL
- 禁用或启用属于外部表的所有触发器。
USER
- 除内部生成的触发器外,禁用或启用属于外部表的所有触发器。
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标准相符。其他形式为SeaboxMPP数据库在SQL标准的扩展。在单个ALTER FOREIGN TABLE
命令中指定多个操作的功能也是SeaboxMPP数据库的扩展。可以使用
ALTER FOREIGN TABLE ... DROP COLUMN
来删除外部表中唯一的列,留下一个零列的表。这也是SQL的扩展,允许存在零列的外部表。 - 相关SQL命令
ALTER TABLE
,CREATE FOREIGN TABLE
,DROP FOREIGN TABLE