当前位置: 主页 > 天剑狂刀BT页游 >

ALTER TABLE(3)

时间:2023-03-24 22:56来源:8N.org.Cn 作者:天剑狂刀私服 点击:

虽然CREATE TABLE允许在WITH (storage_parameter)语法中指定 OIDS,但是 ALTER TABLE没有把OIDS当作一个存储 参数,而是使用SET WITH OIDS 和SET WITHOUT OIDS形式来更改 OID 状态。

RESET ( storage_parameter [, ... ] )

这种形式把一个或者更多存储参数重置到它们的默认值。和 SET一样,可能需要一次表重写来更新整个表。

INHERIT parent_table

这种形式把目标表增加为指定父表的一个新子女。随后,针对父亲的查询将 包括目标表中的记录。要被增加为一个子女,目标表必须已经包含和父表完 全相同的列(也可以有额外的列)。这些列必须具有匹配的数据类型,并且 如果它们在父表中具有NOT NULL约束,它们在子表中 也必须有NOT NULL约束。

也必须把子表约束与所有父表的CHECK约束进行匹配, 不过父表中那些被标记为非可继承(也就是用ALTER TABLE ... ADD CONSTRAINT ... NO INHERIT 创建的)除外,它们会被忽略。所有匹配得上的子表约束不能被标记为不可 继承。当前,UNIQUE、PRIMARY KEY 以及FOREIGN KEY约束没有被考虑,但是这种情况可能 会在未来发生变化。

NO INHERIT parent_table

这种形式把目标表从指定父表的子女列表中移除。针对父表的查询将不再包括 来自目标表的记录。

OF type_name

这种形式把该表链接到一种组合类型,就好像CREATE TABLE OF所做的那样。该表的列名和类型列表必须精确地匹配 该组合类型。oid系统列的存在情况可以不同。该表必须 不从任何其他表继承。这些限制确保 CREATE TABLE OF能允许一个等价的表定义。

NOT OF

这种形式解除一个有类型的表和其类型之间的关联。

OWNER

这种形式把表、序列、视图、物化视图或外部表的拥有者改为指定用户。

REPLICA IDENTITY

这种形式更改被写入到预写式日志来标识被更新或删除行的信息。除非使用逻辑复制, 这个选项将不会产生效果。DEFAULT(非系统表的默认值)记录主键列 (如果有)的旧值。USING INDEX记录被所提到的索引所覆盖的列的 旧值,该索引必须是唯一索引、不是部分索引、不是可延迟索引并且只包括被标记成 NOT NULL的列。FULL记录行中所有列的旧值。 NOTHING不记录有关旧行的任何信息(这是系统表的默认值)。在所 有情况下,除非至少有一个要被记录的列在新旧行版本之间发生变化,将不记录旧值。

RENAME

RENAME形式更改一个表(或者一个索引、序列、视图、物化视图 或者外部表)的名称、表中一个列的名称或者表的一个约束的名称。它对已存储的数据 没有影响。

SET SCHEMA

这种形式把该表移动到另一个模式中。相关的该表列拥有的索引、约束和序列也会被 移动。

ATTACH PARTITION partition_name FOR VALUES partition_bound_spec

这种形式使用与CREATE TABLE相同的 partition_bound_spec语法, 将现有的表(可能本身是分区)作为目标表的分区。 分区绑定规范必须对应于目标表的分区策略和分区键。 要绑定的表必须与目标表具有相同的列,而不能再多;此外, 列类型也必须匹配。此外,它必须具有目标表的所有 NOT NULL和CHECK约束。 目前没有考虑UNIQUE、PRIMARY KEY 和FOREIGN KEY约束。 如果附加表的任意CHECK约束被标记为NO INHERIT, 则该命令将失败;必须重新创建这样的约束,而不使用NO INHERIT子句。

如果新的分区是普通表,则执行一个全表扫描来检查表中的现有行是否违反分区约束。 可以通过给该表添加一个有效的CHECK约束来避免此扫描, 在执行此命令之前,只允许满足所需分区约束的行。将使用这样的约束来确定, 而不需要扫描表来验证分区约束。但是,如果任何分区键是表达式并且分区不接受 NULL值,这将起作用。如果附加一个不接受 NULL值的列表分区,除非它是一个表达式, 否则向分区键列添加NOT NULL约束。

如果新分区是外部表,则不会执行任何操作来验证外部表中的所有行都遵守分区约束。 (请参阅CREATE FOREIGN TABLE中关于外部表的约束的讨论。)

DETACH PARTITION partition_name

该形式分离目标表的指定分区。分离的分区作为独立表继续存在,变态天剑狂刀,但不再与分离的表相关联。

除了RENAME、SET SCHEMA、 ATTACH PARTITION和 DETACH PARTITION 之外的所有作用于单个表的ALTER TABLE形式可以整合到一个具有多个修改的列表中一起使用。例如,可以在一个命 令中增加一些列并且/或者修改一些列的类型。对于大型的表这是特别有用的, 因为只需要对表做一趟操作。

要使用ALTER TABLE,你必须拥有该表。要更改一个表的 模式或者表空间,你还必须拥有新模式或表空间上的 CREATE特权。要把一个表作为一个父表的新子表加入, 你必须也拥有该父表。另外,要将一个表附加为表的新分区,您必须拥有要附加的那个表。要更改拥有者,你还必须 是新拥有角色的一个直接或者间接成员,并且该角色必须具有该表的模式上的 CREATE特权(这些限制强制修改拥有者不能做一些通过删除和重 建表做不到的事情。不过,一个超级用户怎么都能更改任何表的所有权。)。 要增加一个列、修改一列的类型或者使用OF子句,你还必 须具有该数据类型上的USAGE特权。

------分隔线----------------------------