- ALTER TYPE
功能描述
修改类型的参数。
语法格式
ALTER TYPE name action [, ... ]
ALTER TYPE name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
ALTER TYPE name RENAME ATTRIBUTE attribute_name TO new_attribute_name [ CASCADE | RESTRICT ]
ALTER TYPE name RENAME TO new_name
ALTER TYPE name SET SCHEMA new_schema
ALTER TYPE name ADD VALUE [ IF NOT EXISTS ] new_enum_value [ { BEFORE | AFTER } neighbor_enum_value ]
ALTER TYPE name RENAME VALUE existing_enum_value TO new_enum_value
这里action 是以下之一:
ADD ATTRIBUTE attribute_name data_type [ COLLATE collation ] [ CASCADE | RESTRICT ]
DROP ATTRIBUTE [ IF EXISTS ] attribute_name [ CASCADE | RESTRICT ]
ALTER ATTRIBUTE attribute_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ CASCADE | RESTRICT ]
参数说明
- name:需要修改的现有的类型的名字,可以被模式修饰;
- new_name:该类型的新名称;
- new_owner:新所有者的用户名;
- new_schema:该类型的新模式;
- attribute_name:拟增加、更改或删除的属性的名称;
- new_attribute_name:拟改名的属性的新名称;
- data_type:拟新增属性的数据类型,或是拟更改的属性的新类型名;
- new_enum_value:枚举类型新增加的标签值,需要被引号引用;
- neighbor_enum_value:一个已有枚举标签值,新值应该被增加在紧接着该枚举值之前或者之后的位置上;
- existing_enum_value:现有的要重命名的枚举值,需要被引号引用;
- CASCADE:自动级联更新需更新类型以及相关联的记录和继承它们的子表;
- RESTRICT:如果需联动更新类型是已更新类型的关联记录,则拒绝更新,这是默认选项;
注意事项
使用ALTER TYPE必须是该类型的所有者。
范例
ALTER TYPE compfoo RENAME TO g_compfoo;
ALTER TYPE
语法兼容
ALTER TYPE新增和删除是SQL属于SQL标准,其他参数是PostgreSQL 扩展。
相关语法
- ALTER USER
功能描述
修改数据库用户的属性。
语法格式
ALTER USER role_specification [ WITH ] option [ ... ]
其中 option 可以是:
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
| CREATEROLE | NOCREATEROLE
| INHERIT | NOINHERIT
| LOGIN | NOLOGIN
| REPLICATION | NOREPLICATION
| BYPASSRLS | NOBYPASSRLS
| CONNECTION LIMIT connlimit
| [ ENCRYPTED ] PASSWORD 'password'
| VALID UNTIL 'timestamp'
ALTER USER name RENAME TO new_name
ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT }
ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENT
ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] RESET configuration_parameter
ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] RESET ALL
其中 role_specification 可以是:
role_name
| CURRENT_USER
| SESSION_USER
注意事项
ALTER USER现在是 ALTER ROLE的一个别名。详见ALTER ROLE。
语法兼容
ALTER USER语句是一种 PostgreSQL扩展。
相关语法
CREATE USER, DROP USER, ALTER ROLE
- ALTER VIEW
功能描述
更改视图的各种辅助属性。
语法格式
ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name SET DEFAULT expression
ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name DROP DEFAULT
ALTER VIEW [ IF EXISTS ] name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
ALTER VIEW [ IF EXISTS ] name RENAME TO new_name
ALTER VIEW [ IF EXISTS ] name SET SCHEMA new_schema
ALTER VIEW [ IF EXISTS ] name SET ( view_option_name [= view_option_value] [, ... ] )
ALTER VIEW [ IF EXISTS ] name RESET ( view_option_name [, ... ] )
参数说明
- name:现有的视图名称,可以用模式修饰;
- IF EXISTS:如果视图不存在不报错,仅提示;
- SET/DROP DEFAULT:设置或删除一个列的缺省值;
- new_owner:视图新所有者的用户名称;
- new_name:视图的新名称;
- new_schema:视图的新模式;
- SET ( view_option_name [= view_option_value] [, ... ] ) | RESET ( view_option_name [, ... ] ):为视图指定一个可选的参数,参数可选:
- check_option (string):更改视图的检查选项,可选的值为local或者cascaded;
- security_barrier (boolean):指定视图行级安全性;
注意事项
要使用ALTER VIEW必须是该视图的所有者。
要改变视图的模式,用户必须要有新模式的CREATE权限。
要改变视图的所有者,用户必须是新所属角色的直接或者间接的成员,并且此角色必须有视图模式的CREATE权限。
管理员用户可以更改任何视图的所属关系。
范例
ALTER VIEW g_view RENAME TO gc_view;
ALTER VIEW
语法兼容
ALTER VIEW是一种PostgreSQL 的 SQL 标准扩展。
相关语法
- ANALYZE
功能描述
用于收集与数据库中普通表内容相关的统计信息。
语法格式
ANALYZE [ VERBOSE ] [ table_name [ ( column_name [, ...] ) ] ]
参数说明
- VERBOSE:启用显示进度信息;
- table_name:需要分析的特定表的表名(可能会带模式名),如果省略,将对数据库中的所有表(除外部表)进行分析;
- column_name:需要分析特定列的列名,默认为所有列。
注意事项
如果没有指定参数,ANALYZE会分析当前数据库中的每个表和分区表。
范例
ANALYZE VERBOSE orders;
INFO: analyzing "public.orders" inheritance tree
INFO: analyzing "public.orders_history"
INFO: analyzing "public.orders_202003"
INFO: analyzing "public.orders_202004"
ANALYZE
语法兼容
SQL 标准中没有ANALYZE语句。
相关语法
- BEGIN
功能描述
BEGIN用于开始一个事务。
语法格式
BEGIN [ WORK | TRANSACTION ] [ transaction_mode [, ...] ]
其中 transaction_mode 是以下之一:
ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }
READ WRITE | READ ONLY
[ NOT ] DEFERRABLE
参数说明
- WORK | TRANSACTION:可选关键字,除了增加可读性没有其他任何作用。
其他参数的含义请参考 SET TRANSACTION。
注意事项
START TRANSACTION具有和BEGIN 相同的功能。
使用COMMIT或者 ROLLBACK来终止一个事务块。
在已经在一个事务块中时发出BEGIN将触发警告,此时事务状态不会被影响。要在一个事务块中嵌套事务,可以使用保存点(SAVEPOINT)。
由于向后兼容,连续的transaction_modes之间的逗号可以被省略。
范例
开始一个事务:
BEGIN;
语法兼容
BEGIN是PostgreSQL语言扩展,等效于SQL 标准的START TRANSACTION。
相关语法
COMMIT, ROLLBACK, END, START TRANSACTION, SAVEPOINT
- CHECKPOINT
功能描述
检查点(CHECKPOINT)是一个事务日志中的点,所有数据文件都在该点被更新以反映日志中的信息,所有数据文件都将被刷新到磁盘。
设置事务日志检查点。预写式日志(WAL)缺省时在事务日志中每隔一段时间放置一个检查点。
语法格式
CHECKPOINT
注意事项
只有系统管理员能够调用CHECKPOINT。
CHECKPOINT在本地CN和所有DN节点上执行。
范例
CHECKPOINT;
CHECKPOINT
语法兼容
CHECKPOINT命令是一种 PostgreSQL语言扩展。
- CLEAN CONNECTION
功能描述
当数据库有异常时,用来清理数据库连接。
语法格式
CLEAN CONNECTION TO { COORDINATOR ( nodename [, ... ] ) | NODE ( nodename [, ... ] ) | ALL {FORCE} }
[ FOR DATABASE dbname ]
[ TO USER username ]
参数说明
- FORCE:仅在节点列表为TO ALL时可以指定,如果指定该参数,会在清理连接之前检查数据库是否被其他会话连接访问,此参数主要用于DROP DATABASE之前的连接访问检查,如果发现有其他会话连接,则将报错并停止删除数据库;
- dbname:删除指定数据库上的连接,如果不指定则删除所有数据库的连接;
- username:删除指定用户上的连接,如果不指定则删除所有用户的连接;
- nodename:删除指定节点上的连接,三种场景:
- 删除指定CN上的连接;
- 删除指定DN上的连接时,需要指定DN组名;
- 删除所有节点上的连接,包括CN和DN。
范例
CLEAN CONNECTION TO ALL FORCE FOR DATABASE gbase TO USER gbase1;
CLEAN CONNECTION
CLEAN CONNECTION TO NODE (dn2) TO USER gbase1;
CLEAN CONNECTION
语法兼容
CLEAN CONNECTION 不符合 SQL 标准
- CLOSE
功能描述
释放和一个游标关联的所有资源。
语法格式
CLOSE { name | ALL }
注意事项
当创建游标的事务用COMMIT或ROLLBACK终止之后,每个不可保持的已打开游标都隐含关闭。
当创建游标的事务通过ROLLBACK退出之后,每个可以保持的游标都将隐含关闭。
GBase 8c没有明确打开游标的OPEN语句,因为一个游标在使用CURSOR命令定义的时候就打开了。可以通过查询系统视图pg_cursors看到所有可用的游标。
语法兼容
CLOSE完全服从SQL标准。CLOSE ALL是一种PostgreSQL 扩展。
相关语法
- CLUSTER
功能描述
根据一个索引对表进行聚簇排序。
语法格式
CLUSTER [VERBOSE] table_name [ USING index_name ]
CLUSTER [VERBOSE]
参数说明
- table_name:表名称,可以被模式修饰;
- index_name:索引名称;
- VERBOSE:在对表进行聚簇排序时打印进度报告。
注意事项
只有行存B-tree索引支持CLUSTER操作。
如果用户只是随机访问表中的行,那么表中数据的实际存储顺序是无关紧要的。但是,如果对某些数据的访问多于其它数据,而且有一个索引将这些数据分组,那么将使用CLUSTER中会有所帮助。如果从一个表中请求一定索引范围的值, 或者是一个索引值对应多行,CLUSTER也会有助于应用,因为如果索引标识出第一匹配行所在的存储页,所有其它行也可能已经在同一个存储页里了,这样便节省了磁盘访问的时间,加速了查询。
在聚簇过程中,系统先创建一个按照索引顺序建立的表的临时拷贝。同时也建立表上的每个索引的临时拷贝。因此,需要磁盘上有足够的剩余空间, 至少是表大小和索引大小的和。
因为CLUSTER记忆聚集信息,可以在第一次的时候手工对表进行聚簇,然后设置一个类似VACUUM的时间,这样就可以周期地自动对表进行聚簇操作。
因为优化器记录着有关表的排序的统计,所以建议在新近聚簇的表上运行ANALYZE。否则,优化器可能会选择很差劲的查询规划。
CLUSTER不允许在事务中执行。
CLUSTER也将在所有数据节点上执行。
范例
CLUSTER customer USING gcustomer_idx;
CLUSTER
语法兼容
在 SQL 标准中没有CLUSTER语句。
- COMMENT
功能描述
定义或修改一个对象的注释。
语法格式
COMMENT ON
{
ACCESS METHOD object_name |
AGGREGATE aggregate_name ( aggregate_signature ) |
CAST (source_type AS target_type) |
COLLATION object_name |
COLUMN relation_name.column_name |
CONSTRAINT constraint_name ON table_name |
CONSTRAINT constraint_name ON DOMAIN domain_name |
CONVERSION object_name |
DATABASE object_name |
DOMAIN object_name |
EXTENSION object_name |
EVENT TRIGGER object_name |
FOREIGN DATA WRAPPER object_name |
FOREIGN TABLE object_name |
FUNCTION function_name ( [ [ argmode ] [ argname ] argtype [, ...] ] ) |
INDEX object_name |
LARGE OBJECT large_object_oid |
MATERIALIZED VIEW object_name |
OPERATOR operator_name (left_type, right_type) |
OPERATOR CLASS object_name USING index_method |
OPERATOR FAMILY object_name USING index_method |
POLICY policy_name ON table_name |
[ PROCEDURAL ] LANGUAGE object_name |
ROLE object_name |
RULE rule_name ON table_name |
SCHEMA object_name |
SEQUENCE object_name |
SERVER object_name |
TABLE object_name |
TABLESPACE object_name |
TEXT SEARCH CONFIGURATION object_name |
TEXT SEARCH DICTIONARY object_name |
TEXT SEARCH PARSER object_name |
TEXT SEARCH TEMPLATE object_name |
TRANSFORM FOR type_name LANGUAGE lang_name |
TRIGGER trigger_name ON table_name |
TYPE object_name |
VIEW object_name
} IS 'text'
ACCESS METHOD object_name |
AGGREGATE aggregate_name ( aggregate_signature ) |
CAST (source_type AS target_type) |
COLLATION object_name |
COLUMN relation_name.column_name |
CONSTRAINT constraint_name ON table_name |
CONSTRAINT constraint_name ON DOMAIN domain_name |
CONVERSION object_name |
DATABASE object_name |
DOMAIN object_name |
EXTENSION object_name |
EVENT TRIGGER object_name |
FOREIGN DATA WRAPPER object_name |
FOREIGN TABLE object_name |
FUNCTION function_name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] |
INDEX object_name |
LARGE OBJECT large_object_oid |
MATERIALIZED VIEW object_name |
OPERATOR operator_name (left_type, right_type) |
OPERATOR CLASS object_name USING index_method |
OPERATOR FAMILY object_name USING index_method |
POLICY policy_name ON table_name |
[ PROCEDURAL ] LANGUAGE object_name |
PUBLICATION object_name |
ROLE object_name |
RULE rule_name ON table_name |
SCHEMA object_name |
SEQUENCE object_name |
SERVER object_name |
STATISTICS object_name |
SUBSCRIPTION object_name |
TABLE object_name |
TABLESPACE object_name |
TEXT SEARCH CONFIGURATION object_name |
TEXT SEARCH DICTIONARY object_name |
TEXT SEARCH PARSER object_name |
TEXT SEARCH TEMPLATE object_name |
TRANSFORM FOR type_name LANGUAGE lang_name |
TRIGGER trigger_name ON table_name |
TYPE object_name |
VIEW object_name
} IS 'text'
其中 aggregate_signature 是:
* |
[ argmode ] [ argname ] argtype [ , ... ] |
[ [ argmode ] [ argname ] argtype [ , ... ] ] ORDER BY [ argmode ] [ argname ] argtype [ , ... ]
参数说明
- object_name:对象名;
- relation_name.column_name:定义/修改注释的列名称,前缀可加表名称;
- aggregate_name:聚集函数的名称;
- constraint_name:定义/修改注释的表约束的名称;
- function_name:定义/修改注释的函数名称;
- operator_name:操作符名称;
- policy_name:安全性策略名称;
- rule_name:规则名称;
- trigger_name:触发器名称。
- table_name:表的名称
- domain_name:当在一个约束、触发器、规则或者策略上创建一段注释时,这些参数指定在其上定义该对象的表或域的名称
- source_type:类型转换的源数据类型;
- target_type:类型转换的目标数据类型;
- argmode:函数参数的模式,可选参数:IN、 OUT、INOUT或者VARIADIC,默认为IN;
- argname:函数参数的名称;
- argtype:函数参数的类型;
- large_object_oid:定义/修改注释的大对象的OID值;
- left_type | right_type:操作参数的数据类型,可以被模式修饰,当前置或者后置操作符不存在时,可以增加NONE选项;
- PROCEDURAL:噪声词;
- type_name:该转换的数据类型的名称;
- lang_name:该转换的语言的名称;
- text:注释。
注意事项
目前注释浏览没有安全机制:任何连接到某数据库上的用户都可以看到所有该数据库对象的注释。共享对象(比如数据库、角色、表空间)的注释是全局存储的,连接到任何数据库的任何用户都可以看到它们。因此,不要在注释里存放与安全有关的敏感信息。
范例
COMMENT ON TABLE customer IS 'This is my customer.';
COMMENT
语法兼容
SQL 标准中没有COMMENT命令。