ALTER FOREIGN TABLE

ALTER FOREIGN TABLE

修改外表的定义。

概要

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是下列中的一个:

    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关键字而这个列不存在,Greenplum数据库只会产生一个提醒而不是抛出错误。

IF EXISTS

如果指定了IF EXISTS关键字而外表不存在,Greenplum数据库只会产生一个提醒而不是抛出错误。

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

这些形式配置了触发那些属于外表的触发器。更多细节参考ALTER TABLE中类似的形式。

OWNER

这种形式修改外表的所有者为指定的用户。

RENAME

RENAME修改一个外表的名字或者外表中个别列的名字。

SET SCHEMA

这种形式将外表移到其他的模式下。

OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ] )

为外表修改选项。ADD, SETDROP 指定了要执行的操作。 如果没有明确指出操作,默认的操作是ADD。选项名 必须是唯一的。Greenplum数据库用外部数据包装器来验证名字和值。

你可以将除You can combine all of the actions except RENAMESET SCHEMA之外的所有操作写在一个列表里让Greemplum数据库来并行的应用这些修改。 比如,可以在一个命令中增加多列或者修改多列的属性。

你必须是拥有这个表才能使用ALTER FOREIGN TABLE操作。为了修改外表的模式,你还必须在新的模式下拥有CREATE的权限。为了修改所有者,你必须是新的角色的直接或者间接成员,而且那个角色必须在表的模式下拥有CREATE权限。(这些限制强制要求通过删除和重新创建表来更改所有者不会执行任何操作。 但是,超级用户无论如何都可以更改任何表的所有权。)为了新增或者修改一个列的类型,你必须在数据类型上拥有USAGE权限。

参数

name

要更改的现有外部表的名称(可能是模式限定的)。

column_name

新的或者已存在的列的名称。

new_column_name

已存在的列的新名称

new_name

外表的新的名称。

data_type

新的列的数据类型,或者已存在的列的新数据类型。

CASCADE

自动删除依赖于要删除列的对象(比如说,关联到列的视图)。

RESTRICT

拒绝删除有任何对象依赖的列。这是默认的表现。

trigger_name

要启用或者禁用的单个触发器名称。

ALL

禁用或启用属于外表的所有触发器。 (如果任何触发器是内部生成的触发器,则需要超级用户权限。核心系统不会将此类触发器添加到外表,但附加代码可以这样做。)

USER

除内部生成的触发器外,禁用或启用属于外表的所有触发器。

new_owner

外表的新所有者的用户名。

new_schema

外表将移动到的模式的名称

Notes

关键字COLUMN是一个噪声词可以被忽略。

使用Consistency with the foreign server is not checked when a column is added or removed with 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标准相符。其他形式为Greenplum数据库在SQL标准的扩展。在单个ALTER FOREIGN TABLE命令中指定多个操作的功能也是Greenplum数据库的扩展。

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