功能描述
定义一个新的域。
语法格式
CREATE DOMAIN name [ AS ] data_type
[ COLLATE collation ]
[ DEFAULT expression ]
[ constraint [ ... ] ]
其中 constraint 是:
[ CONSTRAINT constraint_name ]
{ NOT NULL | NULL | CHECK (expression) }
参数说明
CHECK (expression):指定域的值必须满足的完整性约束或测试,约束必须是一个产生布尔结果的表达式。
注意事项
值转换成域类型的时候会进行约束检查(特别是NOT NULL)。
范例
创建us_postal_code数据类型并且把它用在一个表定义中:
CREATE DOMAIN us_postal_code AS TEXT
CHECK(
VALUE ~ '^\d{5}$'
OR VALUE ~ '^\d{5}-\d{4}$'
);
CREATE DOMAIN
CREATE TABLE us_snail_addy (
address_id SERIAL PRIMARY KEY,
street1 TEXT NOT NULL,
street2 TEXT,
street3 TEXT,
city TEXT NOT NULL,
postal us_postal_code NOT NULL
);
CREATE TABLE
语法兼容
CREATE DOMAIN符合 SQL 标准。
相关语法
功能描述
安装扩展。
语法格式
CREATE EXTENSION [ IF NOT EXISTS ] extension_name
[ WITH ] [ SCHEMA schema_name ]
[ VERSION version ]
[ FROM old_version ]
[ CASCADE ]
参数说明
注意事项
安装的扩展不能与现有扩展重名。
范例
CREATE EXTENSION hstore;
CREATE EXTENSION
语法兼容
CREATE EXTENSION是PostgreSQL扩展。
相关语法
ALTER EXTENSION, DROP EXTENSION
功能描述
创建函数。
语法格式
CREATE [ OR REPLACE ] FUNCTION
name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } default_expr ] [, ...] ] )
[ RETURNS rettype
| RETURNS TABLE ( column_name column_type [, ...] ) ]
{ LANGUAGE lang_name
| TRANSFORM { FOR TYPE type_name } [, ... ]
| WINDOW
| IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF
| CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
| [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
| PARALLEL { UNSAFE | RESTRICTED | SAFE }
| COST execution_cost
| ROWS result_rows
| SET configuration_parameter { TO value | = value | FROM CURRENT }
| AS 'definition'
| AS 'obj_file', 'link_symbol'
} ...
[ WITH ( attribute [, ...] ) ]
参数说明
注意事项
GBase 8c数据库允许函数重载,同一个名称可以用于多个不同函数,但他们必须有可以区分的输入参数类型。请注意,所有函数的C名称不能相同,用户必须给被重载的C函数指定不同的C名称。
GBase 8c数据库允许使用完整的SQL语句生命函数的参数和返回值,需要注意的是,CREATE FUNCTION不能识别带圆括号的类型修饰符。
使用CREATE FUNCTION或REPLACE FUNCTION时,不能更改已经分配给其他输入参数的名称;如果有多个输出参数,不能修改输出参数的名称。
如果一个被声明为STRICT的函数带有VARIADIC参数,会严格检查结果是否为空,如果为空,该函数仍将被调用。
范例
CREATE FUNCTION add(integer, integer) RETURNS integer
AS 'select $1 + $2;'
LANGUAGE SQL
IMMUTABLE
RETURNS NULL ON NULL INPUT;
CREATE FUNCTION
语法兼容
CREATE FUNCTION命令被定义在SQL:1999及其后的版本中。PostgreSQL的版本类似但不完全兼容。属性是不可移植的,不同的可用语言也是不能移植的。
相关语法
ALTER FUNCTION, DROP FUNCTION, GRANT, LOAD, REVOKE
功能描述
创建新的用户组。
语法格式
CREATE GROUP name [ [ WITH ] option [ ... ] ]
其中 option 可以是:
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
| CREATEROLE | NOCREATEROLE
| INHERIT | NOINHERIT
| LOGIN | NOLOGIN
| [ ENCRYPTED ] PASSWORD 'password'
| VALID UNTIL 'timestamp'
| IN ROLE role_name [, ...]
| IN GROUP role_name [, ...]
| ROLE role_name [, ...]
| ADMIN role_name [, ...]
| USER role_name [, ...]
| SYSID uid
参数说明
参考CREATE ROLE的参数说明。
注意事项
CREATE GROUP是CREATE ROLE的别名。
语法兼容
在 SQL 标准中没有CREATE GROUP语句。
相关语法
功能描述
定义新的索引。
语法格式
CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] name ] ON table_name [ USING method ]
( { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] )
[ WITH ( storage_parameter = value [, ... ] ) ]
[ TABLESPACE tablespace_name ]
[ WHERE predicate ]
参数说明
索引存储参数
可选的WITH语句为索引指定存储参数,每种索引方法都有特定的存储参数集合。btree、hash、gist、spgist索引都接受这个参数:
GiST还额外接受这个参数:
GIN索引接受不同的参数:
BRIN索引接受不同的参数:
pages_per_range:定义用于每一个BRIN索引项的块范围由多少个表块组成,缺省为128;
autosummarize:定义每当在下一页检测到插入时,是否为前一页范围调用汇总运行。
注意事项
索引可以用来提高数据库查询性能,但是不恰当的使用将导致数据库性能下降。建议仅在匹配如下某条原则时创建索引:
在分区表上创建唯一索引时,索引项中必须包含分布列和所有分区键。
当前只有B-树、GiST、GIN 和 BRIN 索引方法支持多列索引,只有B-树支持唯一索引。
使用DROP INDEX可以移除索引。
范例
CREATE UNIQUE INDEX customer_idx ON customer(id);
CREATE INDEX
语法兼容
CREATE INDEX是PostgreSQL的语言扩展。
相关语法
功能描述
定义新的语言。
语法格式
CREATE [ OR REPLACE ] [ PROCEDURAL ] LANGUAGE name
CREATE [ OR REPLACE ] [ TRUSTED ] [ PROCEDURAL ] LANGUAGE name
HANDLER call_handler [ INLINE inline_handler ] [ VALIDATOR valfunction ]
参数说明
注意事项
系统表pg_language记录了当前已安装的语言的信息,或使用\dl命令列出当前已安装的语言。
使用DROP LANGUAGE删除过程语言。
范例
创建标准过程语言:
CREATE LANGUAGE plperl;
对于不在pg_pltemplate目录的语言,需要这样的命令序列:
CREATE FUNCTION plsample_call_handler() RETURNS language_handler
AS '$libdir/plsample'
LANGUAGE C;
CREATE LANGUAGE plsample
HANDLER plsample_call_handler;
语法兼容
CREATE LANGUAGE是一种 PostgreSQL扩展。
相关语法
ALTER LANGUAGE, CREATE FUNCTION, DROP LANGUAGE, GRANT, REVOKE
功能描述
定义新的物化视图。
语法格式
CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] table_name
[ (column_name [, ...] ) ]
[ WITH ( storage_parameter [= value] [, ... ] ) ]
[ TABLESPACE tablespace_name ]
AS query
[ WITH [ NO ] DATA ]
参数说明
范例
CREATE MATERIALIZED VIEW IF NOT EXISTS mv_customer
AS
SELECT * FROM customer
WITH DATA;
SELECT 9
语法兼容
CREATE MATERIALIZED VIEW是PostgreSQL扩展。
相关语法
ALTER MATERIALIZED VIEW, CREATE TABLE AS, CREATE VIEW, DROP MATERIALIZED VIEW, REFRESH MATERIALIZED VIEW
功能描述
创建新的集群节点,CREATE NODE是集群管理工具封装的内部接口,用来实现集群管理,该接口不建议用户直接使用,以免对集群状态造成影响。
语法格式
CREATE NODE nodename WITH
(
[ TYPE = nodetype,]
[ HOST = hostname,]
[ PORT = portnum,]
[ PRIMARY [ = boolean ],]
[ PREFERRED [ = boolean ] ]
)
参数说明
注意事项
CREATE NODE不建议用户直接使用,以免对集群状态造成影响。
语法兼容
CREATE NOD不是标准SQL语法。
相关语法
功能描述
创建新的集群节点组,CREATE NODE GROUP是集群管理工具封装的内部接口,用来实现集群管理,该接口不建议用户直接使用,以免对集群状态造成影响。
语法格式
CREATE NODE GROUP groupname
WITH ( nodename [, ... ] )
参数说明
groupname:节点组名称;
nodename:节点名称;
注意事项
CREATE NODE GROUP是集群管理工具封装的内部接口,用来实现集群管理,该接口不建议用户直接使用,以免对集群状态造成影响。
语法兼容
CREATE NODE GROUP不是标准SQL语法。
相关语法
功能描述
定义新的操作符。
语法格式
CREATE OPERATOR name (
PROCEDURE = function_name
[, LEFTARG = left_type ] [, RIGHTARG = right_type ]
[, COMMUTATOR = com_op ] [, NEGATOR = neg_op ]
[, RESTRICT = res_proc ] [, JOIN = join_proc ]
[, HASHES ] [, MERGES ]
)
参数说明
注意事项
无法在CREATE OPERATOR中指定操作符的优先级。
使用DROP OPERATOR从数据库中删除用户定义的操作符。 使用ALTER OPERATOR修改数据库中的操作符。
范例
CREATE OPERATOR === (
LEFTARG = box,
RIGHTARG = box,
PROCEDURE = area_equal_procedure,
COMMUTATOR = ===,
NEGATOR = !==,
RESTRICT = area_restriction_procedure,
JOIN = area_join_procedure,
HASHES, MERGES
);
语法兼容
CREATE OPERATOR是PostgreSQL扩展。
相关语法