资讯详情

金仓数据库 KingbaseES SQL 语言参考手册 (13. SQL语句:ALTER SYNONYM 到 COMMENT)

13.SQL语句:ALTER SYNONYM 到 COMMENT

本章包含以下内容SQL语句:

  • ALTER SYNONYM

  • ALTER SYSTEM

  • ALTER TABLE

  • ALTER TABLESPACE

  • ALTER TEXT SEARCH CONFIGURATION

  • ALTER TEXT SEARCH DICTIONARY

  • ALTER TEXT SEARCH PARSER

  • ALTER TEXT SEARCH TEMPLATE

  • ALTER TRIGGER

  • ALTER TYPE

  • ALTER USER

  • ALTER USER MAPPING

  • ALTER VIEW

  • ANALYZE

  • BEGIN

  • CALL/EXEC

  • CHECKPOINT

  • CLOSE

  • CLUSTER

  • COMMENT

13.1.ALTER SYNONYM

ALTERSYNONYM改变同义词的各种辅助属性(如果要修改同义词的定义,则应使用它CREATEORREPLACESYNONYM)。

要使用ALTERSYNONYM,用户必须有同义词的权限。要改变同义词模式,必须有新模式CREATE特权。要改变所有者,必须是新角色的直接或间接成员,这个角色必须具有同义词模式``CREATE``特权(超级用户有权改变任何同义词)。

ALTER [ PUBLIC ] SYNONYM syn_name OWNER TO { new_owner | CURRENT_USER | SESSION_USER } ALTER [ PUBLIC ] SYNONYM [ IF EXISTS ] syn_name RENAME TO new_name 

syn_name

现有同义词的名称(模式可以限制)。

IFEXISTS

当同义词不存在时,不要抛出错误,在这种情况下会发出提示。

new_owner

该同义词新所有者的用户名。

new_name

同义词的新名称。

:把同义词syn_tab重命名为syntab

ALTER SYNONYM syn_tab RENAME TO syntab; 

: 把同义词syn_tab业主修改为U1

ALTER SYNONYM syn_tab OWNER TO U1; 

13.2.ALTER SYSTEM

ALTERSYSTEM在整个数据库集群范围内进行更改 服务器配置参数。它比传统的手工编辑要好kingbase.conf文件的方法更方便。ALTERSYSTEM会给出参数 设置写入到kingbase.auto.conf随着文件中的文件kingbase.conf一起读。将参数设置为DEFAULT或者使用RESET变体可以 从配置项kingbase.auto.conf文件中移除。使用RESETALL所有这类配置项都可以移除。

ALTERSYSTEM下一次重载服务器将设置值 配置后生效,服务器启动时只能更改的参数在下一次服务器重启后生效。 通过以下方法可以实现重载服务器配置:调用 SQL 函数sys_reload_conf(), 运行sys_ctlreload或向主服务器发送一个过程SIGHUP信号。

只能使用超级用户ALTERSYSTEM。还有,由于 该命令直接作用于文件系统,不允许在事务块或函数中使用。

ALTER SYSTEM SET configuration_parameter { TO | = } { value | 'value' | DEFAULT }  ALTER SYSTEM RESET configuration_parameter ALTER SYSTEM RESET ALL 

configuration_parameter

可设置参数的名称。可用参数可见服务器配置参数参考手册。

value

该参数的新值。该值可以指定为由字符串常量、标识符、数字或以上组成的逗号分隔列表。该值的具体形式取决于特定的参数。DEFAULT可用于将参数及其值从kingbase.auto.conf中移除。

设置wal_level

ALTER SYSTEM SET wal_level = replica; 

撤销上述设置,恢复kingbase.conf有效设置:

ALTER SYSTEM RESET wal_level; 

13.3.ALTER TABLE

ALTERTABLE更改现有表的定义。以下描述 几种形式。注意每一种形式所要求的级别可能不同。如果没有明确说明,将会 持有一个ACCESSEXCLUSIVE当多个子命令被列出时,所持有的锁将是子命令要求最严格的锁。

要使用ALTERTABLE,你必须拥有该表。要更改一个表的 在模式或表空间新的模式或表空间CREATE特权。加入一块表作为父表的新子表, 你也必须有父亲的手表。此外,如果你想把一个手表挂在另一个手表的新分区,你必须有一个挂着的手表。要改变所有者,你还必须 它是一个直接或间接的新角色成员,这个角色必须在这个表的模式CREATE特权(这些限制强制修改所有者不能删除或重复 建表做不到的事。但是,超级用户可以更改任何表的所有权。 增加列,修改列的类型或使用OF子句,你还必须 该数据类型必须具有该数据类型USAGE特权。

ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ]     action [, ... ] ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ]     RENAME [ COLUMN ] column_name TO new_column_name ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ]     RENAME CONSTRAIT constraint_name TO new_constraint_name
ALTER TABLE [ IF EXISTS ] name
    RENAME TO new_name
ALTER TABLE [ IF EXISTS ] name
    SET SCHEMA new_schema
ALTER TABLE ALL IN TABLESPACE name [ OWNED BY role_name [, ... ] ]
    SET TABLESPACE new_tablespace [ NOWAIT ]
ALTER TABLE [ IF EXISTS ] name
    ATTACH PARTITION partition_name { FOR VALUES partition_bound_spec | DEFAULT }
ALTER TABLE [ IF EXISTS ] name
    DETACH PARTITION partition_name
ALTER TABLE [ IF EXISTS ] name
    ADD { PARTITION partition partition_bound_spec_ex [ TABLESPACE tablespace_name ] [, ... ] }
ALTER TABLE [ IF EXISTS ] name
    DROP { PARTITION partition | PARTITIONS partition [, ... ] }
ALTER TABLE [ IF EXISTS ] name
    DROP { SUBPARTITION subpartition | SUBPARTITIONS subpartition [, ... ] }
ALTER TABLE [ IF EXISTS ] name
    TRUNCATE { PARTITION partition | PARTITIONS partition [, ... ] }
    [ { DROP [ALL] | REUSE } STORAGE ] [ CASCADE ]
ALTER TABLE [ IF EXISTS ] name
    TRUNCATE { SUBPARTITION subpartition | SUBPARTITIONS subpartition [, ... ] }
    [ { DROP [ALL] | REUSE } STORAGE ] [ CASCADE ]
ALTER TABLE [ IF EXISTS ] name
    SET SUBPARTITION TEMPLATE ( [ SUBPARTITION subpartition [subpartition_bound_spec]
    [ TABLESPACE tablespace_name ] [, ... ] ] )
ALTER TABLE [ IF EXISTS ] name
    EXCHANGE partition_name WITH TABLE table_name [INCLUDING|EXCLUDEING INDEXES] [WITH|WITHOUT VALIDATION]
ALTER TABLE [ IF EXISTS ] name
    SET INTERVAL ( [ interval_expr ] )
ALTER TABLE [ IF EXISTS ] name
    SET STORE IN ( [ tablespace_name [, …] ] )
ALTER TABLE [ IF EXISTS ] name
    ENCRYPTED | NOT ENCYPTED


其中action 是以下之一:

ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ]
ADD [ COLUMN ] [ IF NOT EXISTS ] ( 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 ] [ USING expression ]
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 { INVISIBLE | VISIBLE }
MODIFY column_name [ datatype ][ NULL | NOT NULL ]
MODIFY ( column_name [ datatype ][ NULL | NOT NULL ][, ... ] )
MODIFY column_name { INVISIBLE | VISIBLE}
MODIFY ( column_name { INVISIBLE | VISIBLE } [, ...])
ALTER [ COLUMN ] column_name ADD GENERATED { ALWAYS | BY DEFAULT }
AS IDENTITY [ ( sequence_options ) ]
ALTER [ COLUMN ] column_name { SET GENERATED { ALWAYS | BY DEFAULT } | SET sequence_option | RESTART [ [ WITH ] restart ] } [...]
ALTER [ COLUMN ] column_name DROP IDENTITY [ IF EXISTS ]
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 }
ADD table_constraint [ NOT VALID ]
ADD table_constraint_using_index
ALTER CONSTRAINT constraint_name [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
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 ALL TRIGGERS
DISABLE ALL TRIGGERS
ENABLE REPLICA TRIGGER trigger_name
ENABLE ALWAYS TRIGGER trigger_name
DISABLE RULE rewrite_rule_name
ENABLE RULE rewrite_rule_name
ENABLE REPLICA RULE rewrite_rule_name
ENABLE ALWAYS RULE rewrite_rule_name
DISABLE ROW LEVEL SECURITY
ENABLE ROW LEVEL SECURITY
FORCE ROW LEVEL SECURITY
NO FORCE ROW LEVEL SECURITY
CLUSTER ON index_name
SET WITHOUT CLUSTER
SET WITHOUT OIDS
SET TABLESPACE new_tablespace
SET { LOGGED | UNLOGGED }
SET ( storage_parameter = value [, ... ] )
RESET ( storage_parameter [, ... ] )
INHERIT parent_table
NO INHERIT parent_table
OF type_name
NOT OF
OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
REPLICA IDENTITY { DEFAULT | USING INDEX index_name | FULL | NOTHING }
MODIFY constraint { ENABLE | DISABLE } [ VALIDATE | NOVALIDATE ]
{ ENABLE | DISABLE } [ VALIDATE | NOVALIDATE ] constraint [ ... ]

and partition_bound_spec is:

IN ( partition_bound_expr [, ...] ) |
FROM ( { partition_bound_expr | MINVALUE | MAXVALUE } [, ...] )
  TO ( { partition_bound_expr | MINVALUE | MAXVALUE } [, ...] ) |
WITH ( MODULUS numeric_literal, REMAINDER numeric_literal )

and column_constraint is:

[ CONSTRAINT constraint_name ]
{ NOT NULL |
  NULL |
  CHECK ( expression ) [ NO INHERIT ] |

  DEFAULT default_expr |
  GENERATED ALWAYS AS ( generation_expr ) STORED |
  GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( sequence_options ) ] |
  UNIQUE index_parameters |
  PRIMARY KEY index_parameters |
  REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH
  SIMPLE ]
    [ ON DELETE referential_action ] [ ON UPDATE referential_action ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
[ { ENABLE | DISABLE } [ VALIDATE | NOVALIDATE ] ]

而table_constraint是:

[ CONSTRAINT constraint_name ]
{ CHECK ( expression ) [ NO INHERIT ] |
  UNIQUE ( column_name [, ... ] ) index_parameters |
  PRIMARY KEY ( column_name [, ... ] ) index_parameters |
  EXCLUDE [ USING index_method ] ( exclude_element WITH operator [, ... ] )
  index_parameters [ WHERE ( predicate ) ] |
  FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn [, ... ] ) ]
    [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE referential_action
    ] [ ON UPDATE referential_action ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
[ { ENABLE | DISABLE } [ VALIDATE | NOVALIDATE ] ]

并且 table_constraint_using_index 是:

    [ CONSTRAINT constraint_name ]
    { UNIQUE | PRIMARY KEY } USING INDEX index_name
    [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]

UNIQUE、PRIMARY KEY以及EXCLUDE约束中的index_parameters是:

[ INCLUDE ( column_name [, ... ] ) ]
[ WITH ( storage_parameter [= value] [, ... ] ) ]
[ USING INDEX TABLESPACE tablespace_name ]

exclude_element in an EXCLUDE constraint is:

{ column_name | ( expression ) } [ opclass ] [ ASC | DESC ] [ NULLS { FIRST |
LAST } ]

其中 constraint 是:

{ CONSTRAINT constraint_name |
  UNIQUE ( column_name [, ... ] ) |
  PRIMARY KEY }

partition_bound_spec_ex 是:

VALUES LESS THEN ( { partition_bound_expr | MAXVALUE } [, …] ) |
VALUES ( partition_bound_expr [, …] | DEFAULT )

subpartition_bound_spec 是:

VALUES LESS THEN ( { partition_bound_expr | MAXVALUE } [, …] ) |
VALUES ( partition_bound_expr [, …] | DEFAULT )

IF EXISTS

如果表不存在则不要抛出一个错误。这种情况下会发出一个提示。

name

要修改的一个现有表的名称(可以是模式限定的)。如果在表名前指定了 ONLY,则只会修改该表。如果没有指定ONLY, 该表及其所有后代表(如果有)都会被修改。可选地,在表名后面可以指定 *用来显式地指示包括后代表。

column_name

一个新列或者现有列的名称。

new_column_name

一个现有列的新名称。

new_name

该表的新名称。

data_type

一个新列的数据类型或者一个现有列的新数据类型。

table_constraint

该表的新的表约束。

constraint_name

一个新约束或者现有约束的名称。

CASCADE

自动删除依赖于被删除列或约束的对象(例如引用该列的视图),并且接着删除依赖于那些对象的所有对象(见 依赖跟踪 )。

RESTRICT

如果有任何依赖对象时拒绝删除列或者约束。这是默认行为。

trigger_name

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

ALL

禁用或者启用属于该表的所有触发器(如果有任何触发器是内部产生的约 束触发器则需要超级用户特权,例如那些被用来实现外键约束或者可延迟 一致性和排他约束的触发器)。

USER

禁用或者启用属于该表的所有触发器,内部产生的约束触发器(例如那些 被用来实现外键约束或者可延迟一致性和排他约束的触发器)除外。

index_name

一个现有索引的名称。

storage_parameter

一个表存储参数的名称。

value

一个表存储参数的新值。根据该参数,该值可能是一个数字或者一个词。

parent_table

要与这个表关联或者解除关联的父表。

new_owner

该表的新拥有者的用户名。

new_tablespace

要把该表移入其中的表空间的名称。

new_schema

要把该表移入其中的模式的名称。

partition_name

要被作为新分区附着到这个表或者从这个表上分离的表的名称。

partition_bound_spec

新分区的分区边界说明。更多细节请参考 CREATE TABLE 中相同的语法。

partition

要被作为当前操作的分区名称。

subpartition

要被作为当前操作的子分区名称。

partition_bound_spec_ex

不能与分区表的其他分区重叠。对于范围分区表只能在现有最高分区的后面增加新的分区。如果现有最高分区中每个分区键的上限是MAXVALUE,则无法将分区添加到表中。使用TABLESPACE可以为分区单独指定表空间,如果省略会则使用分区表的表空间。

ADD COLUMN [ IF NOT EXISTS ]

这种形式向该表增加一个新列,使用与 CREATE TABLE 相同的语法。如果指定了 IF NOT EXISTS并且使用这个名字的列已经存在,则 不会抛出错误。

此外也可以通过小括号包围向该表增加多列,括号内的每个新增列,使用与 CREATE TABLE 相同的语法。如果指定了 IF NOT EXISTS并且使用这个名字的列已经存在,则 不会抛出错误。

DROP COLUMN [ IF EXISTS ]

这种形式从表删除一列。涉及到该列的索引和表约束也将会被自动 删除。如果该列的移除会导致引用它的多元统计信息仅包含单一列的数据,则该多元统计信息也将被移除。如果在该表之外有任何东西(例如外键引用或者视图)依赖于该列,你将需要用到CASCADE。如果指定了``IF EXISTS``但该列不存在,则不会抛出错误。这种情况中会发出一个提示。

SET DATA TYPE

这种形式更改表中一列的类型。涉及到该列的索引和简单表约束将通过 重新解析最初提供的表达式被自动转换为使用新的列类型。可选的 COLLATE子句为新列指定一种排序规则,如果被省略, 排序规则会是新列类型的默认排序规则。可选的USING 子句指定如何从旧的列值计算新列值,如果被省略,默认的转换和从旧类型 到新类型的赋值造型一样。如果没有从旧类型到新类型的隐式或者赋值造型, 则必须提供一个USING子句。

SET/DROP DEFAULT

这些形式为一列设置或者移除默认值。默认值只在后续的 INSERTUPDATE命令中生效, 它们不会导致已经在表中的行改变。

SET/DROP NOT NULL

这些形式更改一列是否被标记为允许空值或者拒绝空值。

SET NOT NULL可以只应用于一个列,前提是表中没有一条记录包含该列的NULL值。通常在ALTER TABLE扫描整个表时检查这个。但如果找到有效的检查约束,证明不存在NULL,则跳过表扫描。

如果这个表是一个分区,对于在父表中被标记为NOT NULL的列, 不能在其上执行DROP NOT NULL。要从所有的分区中删除NOT NULL约束,可以在父表上执行DROP NOT NULL。即使在父表上没有NOT NULL约束,这样的约束还是能被增加到分区上。也就是说,即便父表允许空值,子表也可以不允许空值,但反过来不行。

MODIFYNULL/NOT NULL

这些形式更改一列是否被标记为允许空值或者拒绝空值。

MODIFY NOT NULL可以只应用于一个列,前提是表中没有一条记录包含该列的NULL值。通常在ALTER TABLE扫描整个表时检查这个。但如果找到有效的检查约束,证明不存在NULL,则跳过表扫描。

如果这个表是一个分区,对于在父表中被标记为NOT NULL的列, 不能在其上执行MODIFY NOT NULL。要从所有的分区中删除NOT NULL约束,可以在父表上执行MODIFY NOT NULL。即使在父表上没有NOT NULL约束,这样的约束还是能被增加到分区上。也就是说,即便父表允许空值,子表也可以不允许空值,但反过来不行。

MODIFYINVISIBLE/VISIBLE

这些形式兼容了Oracle 变更列隐含属性的语法,允许用户更改该列的属性为隐含或者非隐含。

ADD GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY SET GENERATED { ALWAYS | BY DEFAULT } DROP IDENTITY [ IF EXISTS ]

这些形式更改一列是否是一个标识列,或者是更改一个已有的标识列的产生属性。详情请参考 CREATE TABLE 。

如果DROP IDENTITY IF EXISTS被指定并且该列不是一个标识列,则不会有错误被抛出。在这种情况下会发出一个提示。

SET sequence_option RESTART

这些形式修改位于一个现有标识列之下的序列。``sequence_option``是一个 ALTER SEQUENCE 所支持的选项,例如INCREMENT BY

SET STATISTICS

这种形式为后续的ANALYZE < :ref:`ANALYZE 操作设置针对每列 的统计收集目标。目标可以被设置在范围 0 到 10000 之间,还可以 把它设置为 -1 来恢复到使用系统默认的统计目标(default_statistics_target)。

SET STATISTICS要求一个SHARE UPDATE EXCLUSIVE锁。

SET ( attribute_option = value [, ... ] ) RESET ( attribute_option [, ... ] )

这种形式设置或者重置每个属性的选项。当前,已定义的针对每个属性的 选项只有n_distinctn_distinct_inherited, 它们会覆盖后续ANALYZE < :ref:`ANALYZE 操作所得到的可区分值数量 估计。n_distinct影响该表本身的统计信息,而 n_distinct_inherited影响为该表外加其继承子女收集的统计信息。 当被设置为一个正值时,ANALYZE将假定该列刚好包含指定 数量的可区分非空值。当被设置为一个负值(必须大于等于 -1)时, ANALYZE将假定可区分非空值的数量与表的尺寸成线性比例, 确切的计数由估计的表尺寸乘以给定数字的绝对值计算得到。例如,值 -1 表示 该列中所有的值都是可区分的,而值 -0.5 则表示每一个值平均出现两次。当表的尺寸随时间变化时,这会有所帮助,因为这种计算只有在查询规划时才会被 执行。指定值为 0 将回到正常的估计可区分值数量的做法。

更改针对每个属性的选项要求一个``SHARE UPDATE EXCLUSIVE``锁。

SET STORAGE

这种形式为一列设置存储模式。这会控制这列是会被保持在线内还是放在一个 二级TOAST表中,以及数据是否应被压缩。对于 integer之类的定长、线内、未压缩值必须使用 PLAINMAIN用于线内、可压缩的 数据。EXTERNAL用于外部的、未压缩数据。而 EXTENDED用于外部的、压缩数据。对于大部分支持 非-PLAIN存储的数据类型,EXTENDED 是默认值。使用EXTERNAL将会让很大的 textbytea之上的子串操作运行得更快, 但是代价是存储空间会增加。注意SET STORAGE本身并不改变 表中的任何东西,它只是设置在未来的表更新时要追求的策略。

ADD table_constraint [ NOT VALID ]

这种形式使用和 CREATE TABLE 相同的语法外加 NOT VALID选项为一个表增加一个新的约束,该选项 当前只被允许用于外键和 CHECK 约束。

通常,此表单将导致对表进行扫描,以验证表中所有现有行都满足新约束。 但是,如果使用了NOT VALID选项,则跳过此潜在冗长的扫描。 对于后续的插入或更新,约束仍将被强制执行(即,对于外键,除非引用表中有匹配的行,否则它们将失败,或者除非新行符合指定的检查条件,否则它们将失败)。 但是,在使用VALIDATE constraint 选项进行验证之前,数据库不会假定约束适用于表中的所有行。 有关使用NOT VALID选项的更多信息 。

外键约束的增加要求在被引用表上的一个SHARE ROW EXCLUSIVE锁,除了接收约束的表上的锁之外。

当唯一或者主键约束被添加到分区表时,会有额外的限制,请参考 CREATE TABLE 。 此外,分区表上的外键约束可能无法声明为NOT VALID 。

ADD table_constraint_using_index

这种形式基于一个已有的唯一索引为一个表增加新的 PRIMARY KEYUNIQUE约束。该索引中的 所有列将被包括在约束中。

该索引不能有表达式列或者是一个部分索引。还有,它必须是一个带有 默认排序顺序的 B-树索引。这些限制确保该索引等效于使用常规 ADD PRIMARY KEY或者ADD UNIQUE命令 时创建的索引。

如果PRIMARY KEY被指定,并且该索引的列没有被标记 NOT NULL,那么这个命令将尝试对每一个这样的列做 ALTER COLUMN SET NOT NULL。这需要一次全表扫描 来验证这些列不包含空值。在所有其他情况中,这都是一种很快的操作。

如果提供了一个约束名,那么该索引将被重命名以匹配该约束名。否则 该约束将被命名成索引的名称。

这个命令被执行后,该索引被增加的约束“拥有”,这和用常规 ADD PRIMARY KEYADD UNIQUE命令 创建的索引一样。特别地,删掉该约束将会导致该索引也消失。

当前在分区表上不支持这种形式。

注意

如果需要增加一个新的约束但是不希望长时间阻塞表更新,那么使用现有索引增加约束会有所帮助。要这样做,用 CREATE INDEX CONCURRENTLY创建该索引,并且接着使用这种语法把它安装为一个正式的约束。例子见下文。

ALTER CONSTRAINT

这种形式修改之前创建的一个约束的属性。当前只能修改外键约束。

VALIDATE CONSTRAINT

此表单通过扫描表以确保没有不满足约束的行来验证以前创建的NOT VALID的外键或检查约束。如果约束已经被标记为有效,则什么也不会发生。

DROP CONSTRAINT [ IF EXISTS ]

这种形式在一个表上删除指定的约束,还有位于该约束之下的任何索引。如果IF EXISTS被指定并且该约束不存在,不会抛出错误。在这种情况下会发出一个提示。

ENABLE ALL TRIGGERS

启用所有触发器,与ENABLE TRIGGER ALL功能一致。

DISABLE ALL TRIGGERS

禁用所有触发器,与DISABLE TRIGGER ALL功能一致。

DISABLE/ENABLE [ REPLICA | ALWAYS ] TRIGGER

这些形式配置属于该表的触发器的触发设置。系统仍然知道被禁用触发器 的存在,但是即使它的触发事件发生也不会执行它。对于一个延迟触发器, 会在事件发生时而不是触发器函数真正被执行时检查其启用状态。可以禁 用或者启用用名称指定的单个触发器、表上的所有触发器、用户拥有的触 发器(这个选项会排除内部生成的约束触发器,例如用来实现外键约束或 可延迟唯一和排除约束)。禁用或者启用内部生成的约束触发器要求超级 用户特权,这样做要小心因为如果这类触发器不被执行,约束的完整性当 然无法保证。

触发器引发机制也受到配置变量 session_replication_role 的影响。当复制角色是 “origin”(默认)或者“local”时,被简单启用的 触发器将被触发。被配置为ENABLE REPLICA的触发 器只有在会话处于“replica”模式时才将被触发。被配置为 ENABLE ALWAYS的触发器的触发不会考虑当前复制 角色。

这种机制的效果就是,在默认配置中,触发器不会在复制体上引发。这种效果很有用,因为如果一个触发器在源头上被用来在表之间传播数据,那么复制系统也将复制被传播的数据,并且触发器不应该在复制体上引发第二次,因为那会导致重复。不过,如果一个触发器被用于另一种目的(例如创建外部告警),那么将它设置为ENABLE ALWAYS可能更加合适,这样它在复制体上也会被引发。

这个命令要求一个SHARE ROW EXCLUSIVE锁。

DISABLE/ENABLE [ REPLICA | ALWAYS ] RULE

这些形式配置属于表的重写规则的触发设置。系统仍然知道一个被禁用规则的 存在,但在查询重写时不会应用它。其语义与禁用的/启用的触发器的一样。 对于ON SELECT规则会忽略这个配置,即使当前会话处于 一种非默认的复制角色,这类规则总是会被应用以保持视图工作正常。

规则引发机制也受到配置变量 session_replication_role 的影响,这和上述的触发器类似。

DISABLE/ENABLE ROW LEVEL SECURITY

这些形式控制属于该表的行安全性策略的应用。如果被启用并且该表上 不存在策略,则将应用一个默认否定的策略。注意即使行级安全性被禁 用,在表上还是可以存在策略。在这种情况下,这些策略将 不 会被应用 并且会被忽略。另见 CREATE POLICY 。

NO FORCE/FORCE ROW LEVEL SECURITY

这些形式控制当用户是表拥有者时表上的行安全性策略的应用。如果被启用, 当用户是表拥有者时,行级安全性策略将被应用。如果被禁用(默认),则 当用户是表拥有者时,行级安全性将不会被应用。另见 CREATE POLICY 。

CLUSTER ON

这种形式为未来的 CLUSTER 操作选择默认的索引。 它不会真正地对表进行聚簇。

改变聚簇选项要求一个SHARE UPDATE EXCLUSIVE锁。

SET WITHOUT CLUSTER

这种形式从表中移除最近使用的 CLUSTER 索引说明。这会影响未来的不指定索引的聚簇操作。

改变聚簇选项要求一个SHARE UPDATE EXCLUSIVE锁。

SET WITHOUT OIDS

用于删除oid系统列的向后兼容语法。 由于oid系统列不能再添加了,所以这不会有任何影响。

SET TABLESPACE

这种形式把该表的表空间更改为指定的表空间并且把该表相关联的数据文件 移动到新的表空间中。表上的索引(如果有)不会被移动,但是它们可以用 额外的SET TABLESPACE命令单独移动。 当应用于一个分区表时,不会移动任何内容,但是之后使用CREATE table PARTITION OF >创建的任何分区都将使用这个表空间,除非使用TABLESPACE子句来覆盖它。

当前数据库在一个表空间中的所有表可以用ALL IN TABLESPACE形式 移动,这将会首先锁住所有将被移动的表然后逐个移动。这种形式也支持 OWNED BY,它将只移动指定角色所拥有的表。如果指 定了NOWAIT选项,则命令将在无法立刻获得所有所需 要的锁时失败。注意这个命令不移动系统目录,如果想要移动系统目录,应 该用ALTER DATABASE或者显式的 ALTER TABLE调用。对于这种形式来说, information_schema关系不被认为是系统目录的一部分, 因此它们将会被移动。另见 CREATE TABLESPACE 。

SET { LOGGED | UNLOGGED }

此表单将表从未登录更改为已登录,反之亦然。它不能被应用于一个临时表。

SET ( storage_parameter = value [, ... ] )

这种形式为该表更改一个或者更多存储参数。可用的参数请见 存储参数 < :ref:`CREATETABLE-STORAGE-PARAMETERS 。注意这个 命令将不会立刻修改表内容,这取决于重写表以得到想要的结果可能需要的 参数。可以用 VACUUM 、 CLUSTER 或者 ALTER TABLE的一种形式来强制一次表重写。对于规划器相关的参数,更改将从该表下一次被锁定开始生效,因此当前执行的查询不会受到影响。

对fillfactor、toast以及autovacuum存储参数,还有下面的规划器相关参数,将会拿取SHARE UPDATE EXCLUSIVE锁: effective_io_concurrencyparallel_workersseq_page_costrandom_page_costn_distinct以及n_distinct_inherited

RESET ( storage_parameter [, ... ] )

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

INHERIT parent_table

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

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

NO INHERIT parent_table

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

OF type_name

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

NOT OF

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

OWNER TO

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

REPLICA IDENTITY

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

RENAME

RENAME形式更改一个表(或者一个索引、序列、视图、物化视图 或者外部表)的名称、表中一个列的名称或者表的一个约束的名称。在重命名一个具有底层索引的约束时,该索引也会被重命名。它对已存储的数据 没有影响。

SET SCHEMA

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

ATTACH PARTITION partition_name { FOR VALUES partition_bound_spec | DEFAULT }

这种形式把一个已有表(自身也可能被分区)作为一个分区挂接到目标表。该表可以为特定 的值使用FOR VALUES挂接为分区,或者用DEFAULT挂接 为一个默认分区。对于目标表中的每一个索引,在被挂接的表上都将创建一个响应的索引,如果 已经存在等效的索引,该索引将被挂接到目标表的索引,就像执行了ALTER INDEX ATTACH PARTITION一样。 请注意,如果现有表是一个外部表,那么如果目标表上有UNIQUE索引,则当前不允许将该表附加到目标表的分区中。(参见 CREATE FOREIGN TABLE )

一个使用FOR VALUES的分区使用与 CREATE TABLE 中``partition_bound_spec``相同的语法。分区边界说明必须对应于目标表的分区策略以及分区键。要被挂接的表必须具有和目标表完全相同的所有列,并且不能有多出来的列,而且列的类型也必须匹配。此外,它必须有目标表上所有的NOT NULL以及CHECK约束。当前不考虑FOREIGN KEY约束。来自于父表的UNIQUEPRIMARY KEY约束将被创建在分区上(如果它们还不存在)。如果被挂接的表上的任何CHECK约束被标记为NO INHERIT,则命令将失败,这类约束必须被重建且重建时不能有NO INHERIT子句。

如果新分区是一个常规表,会执行一次全表扫描来检查表中没有现有行违背分区约束。可以通过对表增加一个有效的CHECK约束来避免这种扫描,该约束可以在运行这个命令之前仅允许满足所需分区约束的行。 使用这样一个约束,就可以让表无需被扫描就能验证分区约束。但是,如果任一分区键是一个表达式并且该分区不接受NULL值,这种方式就无效了。如果挂接一个不接受NULL值的列表分区,还应该为分区键列增加NOT NULL约束,除非它是一个表达式。

如果新分区是一个外部表,则不需要验证该外部表中的所有行遵守分区约束(有关外部表上的约束请参考 CREATE FOREIGN TABLE 中的讨论)。

当一个表有默认分区时,定义新分区会更改默认分区的分区约束。默认分区不能包含任何需要被移动到新分区中的行,并且将被扫描以验证不存在那样的行。如果一个合适的CHECK约束存在,这种扫描(和新分区的扫描一样)可以被避免。还是和新分区的扫描一样,当默认分区是外部表时这种扫描总是会被跳过。

DETACH PARTITION partition_name

这种形式会分离目标表的指定分区。被分离的分区继续作为独立的表存在,但是与它之前挂接的表不再有任何联系。任何被挂接到目标表索引的索引也会被分离。

ADD PARTITION partition_name

这种形式会向已有单层分区表中添加新的分区。新分区自动继承分区表的全部列定义、主外键索引和约束、唯一索引和约束、NOT NULL约束、CHECK约束、局部索引和行级触发器。新分区自动继承分区表的全局或者本地临时表属性。使用TABLESPACE可以为分区单独指定表空间,如果省略会则使用分区表的表空间。对于范围分区表,只能在现有最高分区的后面增加新的范围分区,如果现有最高分区中每个分区键的上限是MAXVALUE,则无法将分区添加到表中。对于哈希分区表,每次只能添加一个哈希分区,这个操作将导致数据在分区之间重分布,数据库会根据哈希函数判定相关分区,对其中的行重新计算哈希值,并扩展到新分区。

DROP PARTITION partition

这种形式会删除单层分区表或者复合分区表中的一个分区。

DROP PARTITIONS partition

这种形式会删除单层分区表或者复合分区表中的多个分区。

DROP SUBPARTITION subpartition

这种形式会删除复合分区表中的一个子分区。

DROP SUBPARTITIONS subpartition

这种形式会删除复合分区表中的多个子分区。

TRUNCATE PARTITION partition

这种形式会清空单层分区表或者复合分区表中的一个分区。

TRUNCATE PARTITIONS partition

这种形式会清空单层分区表或者复合分区表中的多个分区。

TRUNCATE SUBPARTITION subpartition

这种形式会清空复合分区表中的一个子分区。

TRUNCATE SUBPARTITIONS subpartition

这种形式会清空复合分区表中的多个子分区。

SET SUBPARTITION TEMPLATE

这种形式会设置复合分区表中的子分区模板。可以创建、替换或删除已存在的子分区模板。它不影响已存在的子分区或者分区索引,新建分区将使用新的子分区模板创建子分区。

EXCHANGE partition_name WITH TABLE table_name

使用EXCHANGE PARTITON语法可以实现一个分区表与普通表的数据交换。 INCLUDING|EXCLUDING INDEXS 语法可以实现对交换数据后的分区进行索引重建,默认是EXCLUDING INDEXS。 WITH|WITHOUT VALIDATION 会检查或者忽略检查参与交换的表内的数据是否符合分区表的边界范围,默认是WITH VALIDATION。

SET INTERVAL ( [ interval_expr ] )

这种形式会设置Interval分区表中的间隔参数。其中interval_expr参见 CREATE TABLE 中``INTERVAL``子句语法。

使用带有interval_expr参数的SET INTERVAL子句,可以将已有普通范围分区表转换为Interval分区表。已有普通范围分区表必须满足Interval分区表的条件,只能有唯一的分区键,分区键中不能包含NULL值,已有最高范围分区边界上限不能是MAXVALUE

使用带有interval_expr参数的SET INTERVAL子句,也可以修改已有间隔分区的间隔值。新的间隔值不会改变已有分区的边界值,而是只会影响新间隔分区的边界值。

使用不含interval_expr参数的SET INTERVAL子句,可以将已有间隔分区转换为普通范围分区,不支持对普通范围分区使用SET INTERVAL()子句。

SET STORE IN ( [ tablespace_name [, …] ] )

这种形式会设置Interval分区表中的表空间。使用SET STORE IN子句可以为Interval分区表指定新分区的表空间列表,且不会影响已有分区的表空间存储。

ENCRYPTED NOT ENCRYPTED

设置表的加密状态,ENCRYPTED 将表变为加密表,生成随机秘钥对表的数据加密。NOT ENCRYPTED 将表变为非加密表。当加密状态发生改变时会重新生成数据文件,变更的代价较大。

除了RENAMESET SCHEMAATTACH PARTITIONDETACH PARTITION之外,所有形式的ALTER TABLE都作用在单个表上,前面这些形式可以被组合成一个多修改的列表被一起应用。例如,可以在一个命令中增加多个列并且/或者修改多个列的类型。对于大型表来说这会特别有用,因为只需要对表做一趟操作。

要向一个表增加一个类型为varchar的列:

ALTER TABLE distributors ADD COLUMN address varchar(30);

要从表中删除一列:

ALTER TABLE distributors DROP COLUMN address RESTRICT;

要在一个操作中更改两个现有列的类型:

ALTER TABLE distributors
    ALTER COLUMN address TYPE varchar(80),
    ALTER COLUMN name TYPE varchar(100);

通过一个USING子句更改一个包含 Unix 时间戳的整数列为 timestamp with time zone

ALTER TABLE foo
    ALTER COLUMN foo_timestamp SET DATA TYPE timestamp with time zone
    USING
        timestamp with time zone 'epoch' + foo_timestamp * interval '1 second';

同样的,当该列具有一个不能自动造型成新数据类型的默认值表达式时:

ALTER TABLE foo
    ALTER COLUMN foo_timestamp DROP DEFAULT,
    ALTER COLUMN foo_timestamp TYPE timestamp with time zone
    USING
        timestamp with time zone 'epoch' + foo_timestamp * interval '1 second',
    ALTER COLUMN foo_timestamp SET DEFAULT now();

To rename an existing column:

ALTER TABLE distributors RENAME COLUMN address TO city;

重命名一个现有的表:

ALTER TABLE distributors RENAME TO suppliers;

重命名一个现有的约束:

ALTER TABLE distributors RENAME CONSTRAINT zipchk TO zip_check;

为一列增加一个非空约束:

ALTER TABLE distributors ALTER COLUMN street SET NOT NULL;

从一列移除一个非空约束:

ALTER TABLE distributors ALTER COLUMN street DROP NOT NULL;

向一个表及其所有子女增加一个检查约束:

ALTER TABLE distributors ADD CONSTRAINT zipchk CHECK (char_length(zipcode) = 5);

只向一个表增加一个检查约束(不为其子女增加):

ALTER TABLE distributors ADD CONSTRAINT zipchk CHECK (char_length(zipcode) = 5)  NO INHERIT;

(该检查约束也不会被未来的子女继承)。

从一个表及其子女移除一个检查约束:

ALTER TABLE distributors DROP CONSTRAINT zipchk;

只从一个表移除一个检查约束:

ALTER TABLE ONLY distributors DROP CONSTRAINT zipchk;

(该检查约束仍为子女表保留在某个地方)。

为一个表增加一个外键约束:

ALTER TABLE distributors ADD CONSTRAINT distfk FOREIGN KEY (address) REFERENCES addresses (address);

为一个表增加一个外键约束,并且尽量不要影响其他工作:

ALTER TABLE distributors ADD CONSTRAINT distfk FOREIGN KEY (address) REFERENCES addresses (address) NOT VALID;
ALTER TABLE distributors VALIDATE CONSTRAINT distfk;

为一个表增加一个(多列)唯一约束:

ALTER TABLE distributors ADD CONSTRAINT dist_id_zipcode_key UNIQUE (dist_id, zipcode);

为一个表增加一个自动命名的主键约束,注意一个表只能拥有一个主键:

ALTER TABLE distributors ADD PRIMARY KEY (dist_id);

把一个表移动到一个不同的表空间:

ALTER TABLE distributors SET TABLESPACE fasttablespace;

把一个表移动到一个不同的模式:

ALTER TABLE myschema.distributors SET SCHEMA yourschema;

重建一个主键约束,并且在重建索引期间不阻塞更新:

CREATE UNIQUE INDEX CONCURRENTLY dist_id_temp_idx ON distributors (dist_id);
ALTER TABLE distributors DROP CONSTRAINT distributors_pkey,
    ADD CONSTRAINT distributors_pkey PRIMARY KEY USING INDEX dist_id_temp_idx;

要把一个分区挂接到一个范围分区表上:

ALTER TABLE measurement
    ATTACH PARTITION measurement_y2016m07 FOR VALUES FROM ('2016-07-01') TO
   ('2016-08-01');

要把一个分区挂接到一个列表分区表上:

ALTER TABLE cities
    ATTACH PARTITION cities_ab FOR VALUES IN ('a', 'b');

要把一个分区挂接到一个哈希分区表上:

ALTER TABLE orders
    ATTACH PARTITION orders_p4 FOR VALUES WITH (MODULUS 4, REMAINDER 3);

要把一个默认分区挂接到一个分区表上:

ALTER TABLE cities
    ATTACH PARTITION cities_partdef DEFAULT;

从一个分区表分离一个分区:

ALTER TABLE measurement
    DETACH PARTITION measurement_y2015m12;

向一个分区表添加一个分区:

ALTER TABLE sales ADD PARTITION q1_2006 VALUES LESS THAN ('2006-04-01');

从一个分区表删除一个或多个分区:

ALTER TABLE sales DROP PARTITION q1_2006;
ALTER TABLE sales DROP PARTITIONS q1_2006,q2_2006;

把一个分区表中的一个或多个分区、子分区清空:

ALTER TABLE sales TRUNCATE PARTITION q1_2006;
ALTER TABLE sales TRUNCATE PARTITIONS q1_2006,q2_2006;

ALTER TABLE sales TRUNCATE SUBPARTITION q1_2006_jan;
ALTER TABLE sales TRUNCATE SUBPARTITIONS q1_2006_jan,q1_2006_feb;

形式ADD(没有USING INDEX)、 DROP [COLUMN]DROP IDENTITYRESTART、 SET DEFAULTSET DATA TYPE(没有USING)、 SET GENERATED以及SET sequence_option服从SQL标准。其他形式都是KingbaseES对SQL标准的扩展。此外,在单个ALTER TABLE命令中指定多个操作的能力是一种扩展。

ALTER TABLE DROP COLUMN可以被用来删除一个表的唯一的列,从而留下一个零列的表。这是一种 SQL 的扩展,SQL 中不允许零列的表。

13.4. ALTER TABLESPACE

ALTER TABLESPACE可以被用于更改一个 表空间的定义。

要更改一个表空间的定义,你必须拥有它。要修改拥有者,你还必须是新拥有角色的一个直接或间接成员(注意超级用户自动拥有这些特权)。

ALTER TABLESPACE name RENAME TO new_name
ALTER TABLESPACE name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
ALTER TABLESPACE name SET ( tablespace_option = value [, ... ] )
ALTER TABLESPACE name RESET ( tablespace_option [, ... ] )
ALTER TABLESPACE name { ONLINE | OFFLINE | READ WRITE | READ ONLY }

name

一个现有表空间的名称。

new_name

该表空间的新名称。新名称不能以sys_开始,因为这类名称被 保留用于系统表空间。

new_owner

该表空间的新拥有者。

tablespace_option

要设置或者重置的一个表空间参数。当前,唯一可用的参数是 seq_page_costrandom_page_costeffective_io_concurrency。 为一个特定表空间设定这两个参数值将覆盖规划器对从该表空间中的表读取 页面代价的估计值,这些估计值由具有相同名称配置参数建立(见 seq_page_cost 、 random_page_cost 、effective_io_concurrency )。如果一个表空间位于一个比其余 I/O子系统更快或者更慢的磁盘上时,这些参数就能派上用场。 此外不允许修改加密框架相关参数的值(encryption、enckey)。

还有和表空间模式相关的参数online_mode、 readonly_mode, 以上两个参数均为bool类型, 分别表空表空间的一级模式ONLINE/OFFLINE 和二级模式READONLY /READWRITE。这两个参数对于ALTER TABLESPACE ... SET/RESET 命令是可以分别设置的(不支持在同一个SET/RESET 语句中同时指定online_mode和 readonly_mode参数)。 关于online_mode的说明参考 :ref: CREATE TABLE 。 readonly_mode参数表示表空间的读写模式, 该模式仅可以通过ALTER TABLESPACE 命令进行修改。 设置 为true 表示表空间是只读的, 用户对于该表空间下的所有对象的读操作都是允许的, 对于所有写操作包含意向写都是禁止的。 备注: 表空间只读或者离线状态设置前,请先关闭参数skip_tablespace_check(仅超级用户有修改和查看权限,默认是开启的),该参数开启状态下不会检查当前操作是否满足表空间状态。

将表空间index_space重命名为fast_raid

ALTER TABLESPACE index_space RENAME TO fast_raid;

更改表空间index_space的拥有者:

ALTER TABLESPACE index_space OWNER TO mary;

更改表空间tblspace为只读模式:

ALTER TABLESPACE tblspace SET (READONLY = TRUE);

也可以通过oracle 语法更改表空间tblspace为离线模式:

ALTER TABLESPACE tblspace OFFLINE;

在 SQL 标准中没有 ALTER TABLESPACE语句。

13.5. ALTER TEXT SEARCH CONFIGURATION

ALTER TEXT SEARCH CONFIGURATION 更改一个文本搜索配置的定义。你可以修改其从记号类型到词典的映射 或者更改该配置的名称或者拥有者。

要使用ALTER TEXT SEARCH CONFIGURATION, 你必须是该配置的拥有者。

ALTER TEXT SEARCH CONFIGURATION name
    ADD MAPPING FOR token_type [, ... ] WITH dictionary_name [, ... ]
ALTER TEXT SEARCH CONFIGURATION name
    ALTER MAPPING FOR token_type [, ... ] WITH dictionary_name [, ... ]
ALTER TEXT SEARCH CONFIGURATION name
    ALTER MAPPING REPLACE old_dictionary WITH new_dictionary
ALTER TEXT SEARCH CONFIGURATION name
    ALTER MAPPING FOR token_type [, ... ] REPLACE old_dictionary WITH new_dictionary
ALTER TEXT SEARCH CONFIGURATION name
    DROP MAPPING [ IF EXISTS ] FOR token_type [, ... ]
ALTER TEXT SEARCH CONFIGURATION name RENAME TO new_name
ALTER TEXT SEARCH CONFIGURATION name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
ALTER TEXT SEARCH CONFIGURATION name SET SCHEMA new_schema

name

一个现有文本搜索配置的名称(可以是模式限定的)。

token_type

由该配置的解析器发出的记号类型的名称。

dictionary_name

在其中查阅指定记号类型的文本搜索字典的名称。如果列出了 多个字典,会按照指定的顺序查阅它们。

old_dictionary

在映射中要替换的文本搜索字典的名称。

new_dictionary

被用来替代old_dictionary 的文本搜索字典的名称。

new_name

该文本搜索配置的新名称。

new_owner

该文本搜索配置的新拥有者。

new_schema

该文本搜索配置的新模式。

ADD MAPPING FOR形式会安装一些词典(用列表列出)用于在其中 查阅指定的记号类型。如果对任一记号类型已经有一个映射,则会发生错误。 ALTER MAPPING FOR形式做同样的事情,但是首先会移除这些记号 类型的任何现有映射。ALTER MAPPING REPLACE形式用 new_dictionary 来替换任何位 置上的old_dictionary。当出 现FOR时,只会为指定的记号类型做这样的事情。如果不出现 FOR,则会为该配置中所有的映射都这样做。 DROP MAPPING形式会移除指定记号类型的所有字典,导致该文本 搜索配置忽略这些类型。除非出现IF EXISTS,在那些记号类型没有 任何映射时会发生错误。

下面的例子把my_config中任何位置上的english字典替换为swedish字典。

ALTER TEXT SEARCH CONFIGURATION my_config
ALTER MAPPING REPLACE english WITH swedish;

在 SQL 标准中没有 ALTER TEXT SEARCH CONFIGURATION 语句。

参见 CREATE TEXT SEARCH CONFIGURATION , DROP TEXT SEARCH CONFIGURATION

13.6. ALTER TEXT SEARCH DICTIONARY

ALTER TEXT SEARCH DICTIONARY更改一个 文本搜索字典的定义。你可以更改该字典的与模板相关的选项,或者更改该 字典的名称或者拥有者。

要使用 ALTER TEXT SEARCH DICTIONARY,你必须是超级用户。

ALTER TEXT SEARCH DICTIONARY name (
    option [ = value ] [, ... ]
)
ALTER TEXT SEARCH DICTIONARY name RENAME TO new_name
ALTER TEXT SEARCH DICTIONARY name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
ALTER TEXT SEARCH DICTIONARY name SET SCHEMA new_schema

name

一个现有的文本搜索字典的名称(可以是模式限定的)。

option

要为这个字典设置的与模板相关的选项的名称。

value

用于一个模板相关选项的新值。如果等号和值被忽略,则会从该字典中移除该选项之前的设置而允许使用默认值。

new_name

该文本搜索字典的新名称。

new_owner

该文本搜索字典的新拥有者。

new_schema

该文本搜索字典的新模式。

模板相关的选项可以以任何顺序出现。

下面的命令更改一个基于 Snowball 的字典的停用词列表。其他参数保持不变。

ALTER TEXT SEARCH DICTIONARY my_dict ( StopWords = newrussian );

下面的命令更改语言选项为dutch,并且完全移除停用词选项。

ALTER TEXT SEARCH DICTIONARY my_dict ( language = dutch, StopWords );

下面的命令“更新”该字典的定义,但是实际没有做任何更改。

ALTER TEXT SEARCH DICTIONARY my_dict ( dummy );

(之所以能这样做是因为选项移除代码在选项不存在时也不会报错)。 这种技巧在为该字典更改配置文件时有用,ALTER 将强制现有的数据库会话重读配置文件,否则如果会话之前已经读取过就不会再次读取。

在 SQL 标准中没有 ALTER TEXT SEARCH DICTIONARY语句。

参见 CREATE TEXT SEARCH DICTIONARY , DROP TEXT SEARCH DICTIONARY

13.7. ALTER TEXT SEARCH PARSER

标签: 用于m12连接器路板用连接器m12

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台