跳转至

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, SETDROP 指定了要执行的操作。 如果没有明确指出操作,默认的操作是ADD。选项名必须是唯一的。SeaboxMPP数据库用外部数据包装器来验证名字和值。

你可以将除RENAMESET 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 COLUMNDROP 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, DROPSET DATA TYPE的形式于SQL标准相符。其他形式为SeaboxMPP数据库在SQL标准的扩展。在单个ALTER FOREIGN TABLE命令中指定多个操作的功能也是SeaboxMPP数据库的扩展。

可以使用ALTER FOREIGN TABLE ... DROP COLUMN来删除外部表中唯一的列,留下一个零列的表。这也是SQL的扩展,允许存在零列的外部表。

相关SQL命令
ALTER TABLE, CREATE FOREIGN TABLE, DROP FOREIGN TABLE