更改外表

ALTER FOREIGN TABLE —更改外部表的定义

Synopsis

ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
    action [, ... ]
ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] 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

where action is one of:

    ADD [ COLUMN ] column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ]
    DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ]
    ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type [ COLLATE collation ]
    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 SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN }
    ALTER [ COLUMN ] column_name OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ])
    ADD table_constraint [ NOT VALID ]
    VALIDATE CONSTRAINT constraint_name
    DROP CONSTRAINT [ IF EXISTS ]  constraint_name [ RESTRICT | CASCADE ]
    DISABLE TRIGGER [ trigger_name | ALL | USER ]
    ENABLE TRIGGER [ trigger_name | ALL | USER ]
    ENABLE REPLICA TRIGGER trigger_name
    ENABLE ALWAYS TRIGGER trigger_name
    SET WITH OIDS
    SET WITHOUT OIDS
    INHERIT parent_table
    NO INHERIT parent_table
    OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
    OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ])

Description

ALTER FOREIGN TABLE更改现有外部表的定义。有几个子窗体:

与将约束添加到常规表的情况不同,没有做任何事情来验证约束是正确的。相反,此操作只是声明应假定某些新条件适用于外表中的所有行。 (请参阅创建外表中的讨论。)如果约束标记为NOT VALID,则不假定该约束成立,而仅记录下来以备将来使用。

请注意,这不等于ADD COLUMN oid oid;会添加一个恰好名为oid的普通列,而不是系统列。

RENAMESET SCHEMA以外的所有动作都可以组合成多个更改列表以并行应用。例如,可以在单个命令中添加几列和/或更改几列的类型。

如果命令写为ALTER FOREIGN TABLE IF EXISTS ...并且外部表不存在,则不会引发任何错误。在这种情况下发出通知。

您必须拥有该表才能使用ALTER FOREIGN TABLE。要更改外部表的架构,您还必须对新架构具有CREATE特权。要更改所有者,您还必须是新拥有角色的直接或间接成员,并且该角色在表的架构上必须具有CREATE特权。 (这些限制规定,更改所有者不会通过删除并重新创建表来执行您无法做的任何事情.但是,超级用户仍然可以更改任何表的所有权.)要添加列或更改列类型,您必须在数据类型上也具有USAGE特权。

Parameters

Notes

关键字COLUMN是噪音,可以省略。

当使用ADD COLUMNDROP COLUMN添加或删除列,添加NOT NULLCHECK约束或使用SET DATA TYPE更改列类型时,不检查与外部服务器的一致性。用户有责任确保表定义与远程端匹配。

有关有效参数的进一步说明,请参见创建外表

Examples

要将列标记为非空:

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');

Compatibility

形式ADDDROPSET DATA TYPE符合 SQL 标准。其他形式是 SQL 标准的 PostgreSQL 扩展。同样,在单个ALTER FOREIGN TABLE命令中指定多个操纵的功能也是一种扩展。

ALTER FOREIGN TABLE DROP COLUMN可用于删除外部表的唯一列,而保留零列表。这是 SQL 的扩展,不允许使用零列外部表。

See Also

创建外表, 下降外表

上一章 首页 下一章