SQL语法
- ABORT
功能描述
回滚当前事务并且撤销所有当前事务中所做的更改。
作用等同于ROLLBACK,更推荐使用ROLLBACK。
语法格式
ABORT [ WORK | TRANSACTION ]
参数说明
- WORK | TRANSACTION:可选关键字,除了增加可读性没有其他任何作用。
注意事项
在事务外部执行ABORT语句不会影响事务的执行,但是会产生一个警告信息。
范例
SELECT * FROM customer;
id | name | birthday | tel
----+--------+------------+-----------
3 | 张飞 | 2020-04-03 | 142356789
5 | 孙坚 | 2020-04-05 | 145623789
1 | 刘备 | 2020-04-01 | 123456789
4 | 曹操 | 2020-04-04 | 154623789
8 | 周瑜 | |
9 | 黄忠 | |
10 | 陶谦 | |
2 | 关羽 | 2020-04-02 | 132456789
6 | 孙策 | 2020-04-06 | 154687923
7 | 诸葛亮 | 2020-04-07 | 456789123
(10 rows)
--事务开始
BEGIN;
BEGIN
INSERT INTO customer VALUES(11,'曹仁');
INSERT 0 1
--事务回滚
ABORT;
ROLLBACK
--再次查询,数据表未变更
SELECT * FROM customer;
id | name | birthday | tel
----+--------+------------+-----------
3 | 张飞 | 2020-04-03 | 142356789
5 | 孙坚 | 2020-04-05 | 145623789
1 | 刘备 | 2020-04-01 | 123456789
4 | 曹操 | 2020-04-04 | 154623789
8 | 周瑜 | |
9 | 黄忠 | |
10 | 陶谦 | |
2 | 关羽 | 2020-04-02 | 132456789
6 | 孙策 | 2020-04-06 | 154687923
7 | 诸葛亮 | 2020-04-07 | 456789123
(10 rows)
相关语法
- ALTER AGGREGATE
功能描述
修改一个聚集函数的参数。
要使用ALTER AGGREGATE需要注意用户权限,拥有创建、修改权限。
语法格式
ALTER AGGREGATE name ( aggregate_signature ) RENAME TO new_name
ALTER AGGREGATE name ( aggregate_signature )
OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
ALTER AGGREGATE name ( aggregate_signature ) SET SCHEMA new_schema
其中 aggregate_signature 是:
* |
[ argmode ] [ argname ] argtype [ , ... ] |
[ [ argmode ] [ argname ] argtype [ , ... ] ] ORDER BY [ argmode ] [ argname ] argtype [ , ... ]
参数说明
- name:现有聚集函数的名称(可以被模式修饰);
- argmode:参数的模式:IN或VARIADIC。缺省情况默认IN;
- argname:参数的名称,无意义,可省略;
- argtype:聚集函数的输入的数据类型。无参数的聚集函数,直接标*。引用有序集聚聚集函数,在直接参数说明和聚集参数说明之间加ORDER BY;
- new_name:新的聚集函数名称;
- new_owner:新的聚集函数的所有者;
- new_schema:新的聚集函数的模式。
注意事项
引用有序集聚聚集函数的推荐语法是在直接参数说明和聚集参数说明之间加ORDER BY。也可以将直接参数说明和聚集参数说明放到一个单一列表中,并省略ORDER BY(这种情况下,如果直接参数说明和聚集参数说明中都使用了VARIADIC "any",只需要写一次VARIADIC "any")。
范例
ALTER AGGREGATE sum (integer) RENAME TO my_sum;
ALTER AGGREGATE
语法兼容
在 SQL 标准中没有ALTER AGGREGATE语句。
相关语法
CREATE AGGREGATE, DROP AGGREGATE
- ALTER COLLATION
功能描述
更改排序规则的参数。
语法格式
ALTER COLLATION name REFRESH VERSION
ALTER COLLATION name RENAME TO new_name
ALTER COLLATION name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
ALTER COLLATION name SET SCHEMA new_schema
参数说明
- name:现有排序规则的名称,可以被模式修饰;
- new_name:排序规则的新名称;
- new_owner:排序规则的新所有者;
- new_schema:排序规则的新模式;
- REFRESH VERSION:更新排序规则的版本。
注意事项
使用ICU库提供的排序规则时,创建排序规则对象时,系统目录中会记录排序规则的特定ICU版本。使用排序规则时,将根据记录的版本检查当前版本,并在发生不匹配时告警。
范例
ALTER COLLATION "french1" RENAME TO french2;
ALTER COLLATION
语法兼容
在 SQL 标准中没有ALTER COLLATION语句。
相关语法
CREATE COLLATION, DROP COLLATION
- ALTER CONVERSION
功能描述
更改编码转换的参数。
语法格式
ALTER CONVERSION name RENAME TO new_name
ALTER CONVERSION name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
ALTER CONVERSION name SET SCHEMA new_schema
参数说明
- name:现有的编码转换的名称,可以被模式修饰;
- new_name:新的编码转换的名称;
- new_owner:编码转换的新的所有者;
- new_schema:编码转换的新模式。
注意事项
用户需要拥有使用ALTER CONVERSION的权限。
范例
要把转换iso_8859_1_to_utf8重命名为latin1_to_unicode:
ALTER CONVERSION iso_8859_1_to_utf8 RENAME TO latin1_to_unicode;
要把转换iso_8859_1_to_utf8的所有者改成joe:
ALTER CONVERSION iso_8859_1_to_utf8 OWNER TO joe;
语法兼容
在 SQL 标准中没有ALTER CONVERSION语句。
相关语法
CREATE CONVERSION, DROP CONVERSION
- ALTER DATABASE
功能描述
修改数据库的属性,包括它的名称、所有者、连接数限制、对象隔离属性等。
语法格式
ALTER DATABASE name [ [ WITH ] option [ ... ] ]
这里 option 可以是:
ALLOW_CONNECTIONS allowconn
CONNECTION LIMIT connlimit
IS_TEMPLATE istemplate
ALTER DATABASE name RENAME TO new_name
ALTER DATABASE name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
ALTER DATABASE name SET TABLESPACE new_tablespace
ALTER DATABASE name SET configuration_parameter { TO | = } { value | DEFAULT }
ALTER DATABASE name SET configuration_parameter FROM CURRENT
ALTER DATABASE name RESET configuration_parameter
ALTER DATABASE name RESET ALL
参数说明
- name:需要修改属性的数据库名称;
- allowconn:为false则数据库不可连接,为true则允许连接;
- connlimit:数据库可以接受的并发连接数,默认-l表示无限制;
- istemplate:为true则所有具有CREATEDB权限的用户都可以克隆这个数据库,为false则只有系统管理员可以克隆这个数据库;
- new_name:数据库的新名称;
- new_owner:数据库的新所有者;
- new_tablespace:数据库新的默认表空间,该表空间为数据库中已经存在的表空间;
- configuration_parameter
value
把指定的数据库会话参数值设置为给定的值,如果value是DEFAULT或者RESET,则在新的会话中使用系统的缺省设置。OFF关闭设置;
范例
要在数据库中默认禁用索引扫描:
ALTER DATABASE gbasedbt SET enable_indexscan TO off;
ALTER DATABASE
语法兼容
ALTER DATABASE语句是一个PostgreSQL扩展。
相关语法
CREATE DATABASE, DROP DATABASE, SET, CREATE TABLESPACE
- ALTER DEFAULT PRIVILEGES
功能描述
设置默认访问权限(这不会影响分配到已有对象中的权限)。
语法格式
ALTER DEFAULT PRIVILEGES
[ FOR { ROLE | USER } target_role [, ...] ]
[ IN SCHEMA schema_name [, ...] ]
abbreviated_grant_or_revoke
其中abbreviated_grant_or_revoke是下列之一:
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
[, ...] | ALL [ PRIVILEGES ] }
ON TABLES
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { { USAGE | SELECT | UPDATE }
[, ...] | ALL [ PRIVILEGES ] }
ON SEQUENCES
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { EXECUTE | ALL [ PRIVILEGES ] }
ON FUNCTIONS
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
ON TYPES
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { USAGE | CREATE | ALL [ PRIVILEGES ] }
ON SCHEMAS
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
REVOKE [ GRANT OPTION FOR ]
{ { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
[, ...] | ALL [ PRIVILEGES ] }
ON TABLES
FROM { [ GROUP ] role_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { USAGE | SELECT | UPDATE }
[, ...] | ALL [ PRIVILEGES ] }
ON SEQUENCES
FROM { [ GROUP ] role_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ EXECUTE | ALL [ PRIVILEGES ] }
ON FUNCTIONS
FROM { [ GROUP ] role_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ USAGE | ALL [ PRIVILEGES ] }
ON TYPES
FROM { [ GROUP ] role_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ USAGE | CREATE | ALL [ PRIVILEGES ] }
ON SCHEMAS
FROM { [ GROUP ] role_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
参数说明
- target_role:已有角色的名称。如果省略FOR ROLE/USER,则缺省值为当前角色/用户;
- schema_name:现有模式的名称,target_role必须有schema_name的CREATE权限。
- role_name:被授予或者取消权限角色的名称。
注意事项
使用gsql的\ddp命令可以获得关于默认特权的现有分配信息。特权值的含义和GRANT下为\dp命令描述的相同。
如果想删除一个被赋予了默认权限的角色,有必要恢复改变的缺省权限或者使用DROPOWNED BY来为角色脱离缺省的权限记录。
范例
ALTER DEFAULT PRIVILEGES IN SCHEMA gbaseschema GRANT SELECT ON TABLES TO PUBLIC;
ALTER DEFAULT PRIVILEGES
语法兼容
在 SQL 标准中没有ALTER DEFAULT PRIVILEGES语句。
相关语法
- ALTER DOMAIN
功能描述
更改域的参数。
语法格式
ALTER DOMAIN name
{ SET DEFAULT expression | DROP DEFAULT }
ALTER DOMAIN name
{ SET | DROP } NOT NULL
ALTER DOMAIN name
ADD domain_constraint [ NOT VALID ]
ALTER DOMAIN name
DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ]
ALTER DOMAIN name
RENAME CONSTRAINT constraint_name TO new_constraint_name
ALTER DOMAIN name
VALIDATE CONSTRAINT constraint_name
ALTER DOMAIN name
OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
ALTER DOMAIN name
RENAME TO new_name
ALTER DOMAIN name
SET SCHEMA new_schema
参数说明
- name:域的名称,可以被模式修饰;
- domain_constraint:新的域约束;
- constraint_name:待删除或重命名的现有的域约束的名称;
- NOT VALID:不为约束的合法性验证现有的数据;
- CASCADE:自动删除依赖于该约束的对象,以及依赖于那些对象的所有对象;
- RESTRICT:默认值,如果有任何依赖对象则拒绝删除该约束;
- new_name:新的域名称;
- new_constraint_name:约束的新名称;
- new_owner:域的新所有者的名称;
- new_schema:域的新模式;
注意事项
ALTER DOMAIN有几种形式:
- SET/DROP DEFAULT
设置或移除域的默认值,该变更只影响后续的INSERT命令,不影响现有行。
- SET/DROP NOT NULL
将域标记为是否允许NULL,只有当使用该域的列均不含空值时才能设置SET NOT NULL。
- ADD domain_constraint [ NOT VALID ]
为域增加新的约束,相当于CREATE DOMAIN。增加新约束时,该域中所有列都会根据新约束进行检查,NOT VALID选项可以规避该检查,新约束在可以使用ALTER DOMAIN ... VALIDATE CONSTRAINT变为可用约束。所有新的插入和更新的行均会按照约束进行检查。只有CHECK约束接受NOT VALID。
- DROP CONSTRAINT [ IF EXISTS ]
删除域约束。指定IF EXISTS则当约束不存在时,不报错仅提示。
- RENAME CONSTRAINT
修改域上约束的名称。
- VALIDATE CONSTRAINT
验证以NOT VALID增加的约束,验证该域的数据满足指定约束。
- OWNER
更改域所有者。
- RENAME
域重命名。
- SET SCHEMA
修改域模式,与该域关联的约束也会移动到新的模式中。
范例
ALTER DOMAIN us_postal_code SET NOT NULL;
ALTER DOMAIN
语法兼容
ALTER DOMAIN conforms to the SQL standard, except for the 除OWNER、RENAME、SET SCHEMA 以及VALIDATE CONSTRAINT变体之外(它们是 PostgreSQL的扩展), ALTER DOMAIN符合SQL标准。 ADD CONSTRAINT变体的NOT VALID子句也是一个 PostgreSQL扩展。
相关语法
- ALTER EXTENSION
功能描述
修改扩展的参数。
语法格式
ALTER EXTENSION name UPDATE [ TO new_version ]
ALTER EXTENSION name SET SCHEMA new_schema
ALTER EXTENSION name ADD member_object
ALTER EXTENSION name DROP member_object
其中 member_object 是:
ACCESS METHOD object_name |
AGGREGATE aggregate_name ( aggregate_signature ) |
CAST (source_type AS target_type) |
COLLATION object_name |
CONVERSION object_name |
DOMAIN object_name |
EVENT TRIGGER object_name |
FOREIGN DATA WRAPPER object_name |
FOREIGN TABLE object_name |
FUNCTION function_name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] |
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 |
[ PROCEDURAL ] LANGUAGE object_name |
SCHEMA object_name |
SEQUENCE object_name |
SERVER object_name |
TABLE 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 |
TYPE object_name |
VIEW object_name
并且 aggregate_signature 是:
* |
[ argmode ] [ argname ] argtype [ , ... ] |
[ [ argmode ] [ argname ] argtype [ , ... ] ] ORDER BY [ argmode ] [ argname ] argtype [ , ... ]
参数说明
- name:已安装的扩展的名称;
- new_version:扩展的新版本号;
- new_schema:扩展的新模式;
- object_name | aggregate_name | function_name | operator_name:要从扩展中增加或移除的对象名称,可以是:表、聚集、域、外部表、函数、操作符、操作符类、操作符族、序列、文本搜索对象、类型和视图,可以被模式修饰;
- source_type:该转换的源数据类型的名称;
- target_type:转换的目标数据类型的名称;
- argmode:函数或聚集的模式,可选的参数为:IN、OUT、INOUT或者VARIADIC,默认为IN;
- argname:函数或聚集的名称;
- argtype:函数或聚集的数据类型;
- left_type | right_type:操作符参数的数据类型,可以被模式修饰;
- type_name:该转换的数据类型的名称;
- lang_name:该转换的语言的名称;
注意事项
ALTER EXTENSION更的几种形式:
- UPDATE
这种形式把该扩展更新到一个新版本,需要提供更新脚本。
- SET SCHEMA
将该扩展的对象移动到另一个模式中,要求该扩展是可重定位的。
- ADD member_object
将一个已有的对象加入到扩展中。
- DROP member_object
从扩展中移除一个成员对象。
范例
ALTER EXTENSION hstore SET SCHEMA gbaseschema;
ALTER EXTENSION
语法兼容
ALTER EXTENSION是一个PostgreSQL 扩展。
相关语法
CREATE EXTENSION, DROP EXTENSION
- ALTER FUNCTION
功能描述
更改一个函数的参数。
语法格式
ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
action [ ... ] [ RESTRICT ]
ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
RENAME TO new_name
ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
SET SCHEMA new_schema
ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
DEPENDS ON EXTENSION extension_name
其中 action 是以下之一:
CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF
[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
PARALLEL { UNSAFE | RESTRICTED | SAFE }
COST execution_cost
ROWS result_rows
SET configuration_parameter { TO | = } { value | DEFAULT }
SET configuration_parameter FROM CURRENT
RESET configuration_parameter
RESET ALL
参数说明
- name:现有函数的名称,可以被模式修饰;
- argmode:函数参数的模式,取值范围:IN、OUT、INOUT或者VARIADIC,缺省为IN;
- argname:函数参数的名称,取值范围:字符串;
- argtype:函数参数的数据类型;
- new_name:该函数的新名称,要修改函数的所属模式,必须拥有新模式的CREATE权限;
- new_owner:该函数的新所有者,要修改函数的所有者,新所有者必须拥有该函数所属模式的CREATE权限;
- new_schema:函数的新模式;
- extension_name:该函数所依赖的扩展名;
- CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT:CALLED ON NULL INPUT表明该函数的某些参数是NULL的时候可以按照正常的方式调用,缺省时与指定此参数的作用相同。STRICT用于指定如果函数的某个参数是NULL,此函数总是返回NULL。如果声明了这个参数,则如果存在NULL参数时不会执行该函数;而只是自动假设一个NULL结果。RETURNS NULL ON NULL INPUT和STRICT的功能相同;
- IMMUTABLE | STABLE | VOLATILE:更改函数设置,详见CREATE FUNCTION;
- [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER:函数权限设置,详见CREATE FUNCTION;
- PARALLEL:表示该函数是否可以下推到DN上执行,详见CREATE FUNCTION;
- LEAKPROOF:更改该函数是否被认为是防泄漏的,详见CREATE FUNCTION;
- COST execution_cost:更改该函数的估计执行代价,详见CREATE FUNCTION;
- ROWS result_rows:估计函数返回的行数,详见CREATE FUNCTION;
- configuration_parameter | value:把指定的数据库会话参数值设置为给定的值。如果value是DEFAULT或者RESET,则在新的会话中使用系统的缺省设置,OFF关闭设置。取值范围:DEFAULT、OFF、RESET;
- RESTRICT:无意义参数。
注意事项
只有该函数的所有者,才有权限执行该命令,系统管理员默认拥有该权限。
范例
ALTER FUNCTION add(integer, integer) RENAME TO gadd;
ALTER FUNCTION
语法兼容
部分兼容SQL标准中的ALTER FUNCTION语句。SQL标准允许修改函数的更多属性,但不提供重命名、标记安全性、附加配置参数或更改所有者、模式或稳定性等功能。
相关语法
CREATE FUNCTION, DROP FUNCTION
- ALTER GROUP
功能描述
修改一个用户组的属性。
语法格式
ALTER GROUP role_specification ADD USER user_name [, ... ]
ALTER GROUP role_specification DROP USER user_name [, ... ]
其中 role_specification 可以是:
role_name
| CURRENT_USER
| SESSION_USER
ALTER GROUP group_name RENAME TO new_name
参数说明
参考ALTER ROLE的参数说明。
注意事项
ALTER GROUP是ALTER ROLE的别名。
语法兼容
在 SQL 标准中没有ALTER GROUP语句。
相关语法