功能描述
定义新的操作符类。
语法格式
CREATE OPERATOR CLASS name [ DEFAULT ] FOR TYPE data_type
USING index_method [ FAMILY family_name ] AS
{ OPERATOR strategy_number operator_name [ ( op_type, op_type ) ] [ FOR SEARCH | FOR ORDER BY sort_family_name ]
| FUNCTION support_number [ ( op_type [ , op_type ] ) ] function_name ( argument_type [, ...] )
| STORAGE storage_type
} [, ... ]
参数说明
注意事项
OPERATOR、FUNCTION和STORAGE 子句可以以任何顺序出现。
范例
下面的例子为数据类型_int4(int4数组)定义了一个 GiST 索引操作符:
CREATE OPERATOR CLASS gist__int_ops
DEFAULT FOR TYPE _int4 USING gist AS
OPERATOR 3 &&,
OPERATOR 6 = (anyarray, anyarray),
OPERATOR 7 @>,
OPERATOR 8 <@,
OPERATOR 20 @@ (_int4, query_int),
FUNCTION 1 g_int_consistent (internal, _int4, smallint, oid, internal),
FUNCTION 2 g_int_union (internal, internal),
FUNCTION 3 g_int_compress (internal),
FUNCTION 4 g_int_decompress (internal),
FUNCTION 5 g_int_penalty (internal, internal, internal),
FUNCTION 6 g_int_picksplit (internal, internal),
FUNCTION 7 g_int_same (_int4, _int4, internal);
语法兼容
CREATE OPERATOR CLASS是PostgreSQL扩展。
相关语法
ALTER OPERATOR CLASS, DROP OPERATOR CLASS, CREATE OPERATOR FAMILY, ALTER OPERATOR FAMILY, DROP OPERATOR FAMILY
功能描述
定义新的操作符族。
语法格式
CREATE OPERATOR FAMILY name USING index_method
参数说明
注意事项
只有系统管理员用户有权限创建操作符族。
语法兼容
CREATE OPERATOR FAMILY是PostgreSQL扩展。
相关语法
ALTER OPERATOR FAMILY, DROP OPERATOR FAMILY, CREATE OPERATOR CLASS, ALTER OPERATOR CLASS, DROP OPERATOR CLASS
功能描述
对表创建行级安全性策略。
语法格式
CREATE POLICY name ON table_name
[ AS { PERMISSIVE | RESTRICTIVE } ]
[ FOR { ALL | SELECT | INSERT | UPDATE | DELETE } ]
[ TO { role_name | PUBLIC | CURRENT_USER | SESSION_USER } [, ...] ]
[ USING ( using_expression ) ]
[ WITH CHECK ( check_expression ) ]
参数说明
针对每种命令的策略
注意事项
当不同命令类型的多个策略应用于相同命令时(例如,应用于UPDATE命令的SELECT和UPDATE策略),则用户必须拥有两种类型的权限。
当同一命令类型的多个策略应用于同一个命令时,必须至少有一个允许访问该关系的 PERMISSIVE策略,并且必须通过所有的RESTRICTIVE策略。
范例
CREATE TABLE test_r(id int, role varchar(100), data varchar(100));
CREATE TABLE
CREATE POLICY test_rls ON test_r USING(role = CURRENT_USER);
CREATE POLICY
语法兼容
CREATE POLICY是PostgreSQL扩展。
相关语法
ALTER POLICY, DROP POLICY, ALTER TABLE
功能描述
创建角色。
语法格式
CREATE ROLE name [ [ WITH ] option [ ... ] ]
where option可以是:
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
| CREATEROLE | NOCREATEROLE
| INHERIT | NOINHERIT
| LOGIN | NOLOGIN
| REPLICATION | NOREPLICATION
| BYPASSRLS | NOBYPASSRLS
| CONNECTION LIMIT connlimit
| [ 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 ROLE gbasedbt PASSWORD'root';
CREATE ROLE
语法兼容
SQL标准中有CREATE ROLE语句,但是标准只要求语法
CREATE ROLE name [ WITH ADMIN role_name ]
多个初始管理员以及CREATE ROLE的所有其他选项都是PostgreSQL扩展。
相关语法
SET ROLE, ALTER ROLE, DROP ROLE, GRANT, REVOKE, CREATE USER, CREATE GROUP
功能描述
定义新的重写规则。
语法格式
CREATE [ OR REPLACE ] RULE name AS ON event
TO table_name [ WHERE condition ]
DO [ ALSO | INSTEAD ] { NOTHING | command | ( command ; command ... ) }
其中 event 可以是以下之一:
SELECT | INSERT | UPDATE | DELETE
参数说明
注意事项
同一个表上的同种事件类型的多条规则会按照其名称的字符顺序被应用。
范例
CREATE RULE "_RETURN" AS
ON SELECT TO t1
DO INSTEAD
SELECT * FROM test_t;
CREATE RULE
语法兼容
CREATE RULE是一种 PostgreSQL语言扩展。
相关语法
功能描述
创建新的模式。
语法格式
CREATE SCHEMA schema_name [ AUTHORIZATION role_specification ] [ schema_element [ ... ] ]
CREATE SCHEMA AUTHORIZATION role_specification [ schema_element [ ... ] ]
CREATE SCHEMA IF NOT EXISTS schema_name [ AUTHORIZATION role_specification ]
CREATE SCHEMA IF NOT EXISTS AUTHORIZATION role_specification
其中 role_specification 可以是:
user_name
| CURRENT_USER
| SESSION_USER
参数说明
注意事项
只要用户对当前数据库有CREATE权限,就可以创建模式。
系统管理员在普通用户同名schema下创建的对象,所有者为schema的同名用户(非系统管理员)。
范例
CREATE SCHEMA gbaseschema;
CREATE SCHEMA
语法兼容
SQL 标准允许在CREATE SCHEMA中有一个DEFAULT CHARACTER SET子句。
相关语法
功能描述
创建一个新的序列。
语法格式
CREATE [ TEMPORARY | TEMP ] SEQUENCE [ IF NOT EXISTS ] name [ INCREMENT [ BY ] increment ]
[ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
[ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ]
[ OWNED BY { table_name.column_name | NONE } ]
参数说明
注意事项
如果给出一个模式名,则该序列就在给定的模式中创建,否则会在当前模式中创建。序列名必须和同一个模式中的其他序列、表、索引、视图或外表的名字不同。
创建序列后,在表中使用序列的nextval()函数和generate_series(1,N)函数对表插入数据,请保证nextval的可调用次数大于等于N+1次,否则会因为generate_series()函数会调用N+1次而导致报错。
范例
创建一个从101开始的递增序列:
CREATE SEQUENCE serial START 101;
CREATE SEQUENCE
从序列中选取下一个数字
SELECT nextval('serial');
nextval
---------
101
(1 row)
在INSERT命令中使用序列:
INSERT INTO disttab VALUES (nextval('serial'),nextval('serial'),'蜀');
INSERT 0 1
语法兼容
CREATE SEQUENCE符合SQL 标准。
相关语法
功能描述
定义扩展统计。
语法格式
CREATE STATISTICS [ IF NOT EXISTS ] statistics_name
[ ( statistics_kind [, ... ] ) ]
ON column_name, column_name [, ...]
FROM table_name
参数说明
注意事项
只有表的所有者可以创建读取表的统计对象。
范例
CREATE TABLE t1 (
a int,
b int
);
INSERT INTO t1 SELECT i/100, i/500
FROM generate_series(1,1000000) s(i);
ANALYZE t1;
-- 匹配行的数量将被大大低估:
EXPLAIN ANALYZE SELECT * FROM t1 WHERE (a = 1) AND (b = 0);
CREATE STATISTICS s1 (dependencies) ON a, b FROM t1;
ANALYZE t1;
-- 现在行计数估计会更准确:
EXPLAIN ANALYZE SELECT * FROM t1 WHERE (a = 1) AND (b = 0);
语法兼容
SQL标准中没有CREATE STATISTICS命令。
相关语法
ALTER STATISTICS, DROP STATISTICS
功能描述
创建新表。
语法格式
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name ( [
{ column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ]
| table_constraint
| LIKE source_table [ like_option ... ] }
[, ... ]
] )
[ INHERITS ( parent_table [, ... ] ) ]
[ PARTITION BY { RANGE | LIST } ( { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [, ... ] ) ]
[ WITH ( storage_parameter [= value] [, ... ] ) | WITH OIDS | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tablespace_name ]
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name
OF type_name [ (
{ column_name [ WITH OPTIONS ] [ column_constraint [ ... ] ]
| table_constraint }
[, ... ]
) ]
[ PARTITION BY { RANGE | LIST } ( { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [, ... ] ) ]
[ WITH ( storage_parameter [= value] [, ... ] ) | WITH OIDS | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tablespace_name ]
[
DISTRIBUTE BY { REPLICATION | ROUNDROBIN | { [HASH | MODULO ] ( column_name ) } } |
DISTRIBUTED { { BY ( column_name ) } | { RANDOMLY } |
DISTSTYLE { EVEN | KEY | ALL } DISTKEY ( column_name )
]
[ TO { GROUP groupname | NODE ( nodename [, ... ] ) } ]
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name
PARTITION OF parent_table [ (
{ column_name [ WITH OPTIONS ] [ column_constraint [ ... ] ]
| table_constraint }
[, ... ]
) ] FOR VALUES partition_bound_spec
[ PARTITION BY { RANGE | LIST } ( { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [, ... ] ) ]
[ WITH ( storage_parameter [= value] [, ... ] ) | WITH OIDS | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tablespace_name ]
DISTRIBUTE BY { REPLICATION | ROUNDROBIN | { [HASH | MODULO ] ( column_name ) } } |
DISTRIBUTED { { BY ( column_name ) } | { RANDOMLY } |
DISTSTYLE { EVEN | KEY | ALL } DISTKEY ( column_name )
]
[ TO { GROUP groupname | NODE ( nodename [, ... ] ) } ]
其中 column_constraint 是:
[ CONSTRAINT constraint_name ]
{ NOT NULL |
NULL |
CHECK ( expression ) [ NO INHERIT ] |
DEFAULT default_expr |
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 action ] [ ON UPDATE action ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
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 action ] [ ON UPDATE action ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
like_option 是:
{ INCLUDING | EXCLUDING } { COMMENTS | CONSTRAINTS | DEFAULTS | IDENTITY | INDEXES | STATISTICS | STORAGE | ALL }
partition_bound_spec 是:
IN ( { numeric_literal | string_literal | TRUE | FALSE | NULL } [, ...] ) |
FROM ( { numeric_literal | string_literal | TRUE | FALSE | MINVALUE | MAXVALUE } [, ...] )
TO ( { numeric_literal | string_literal | TRUE | FALSE | MINVALUE | MAXVALUE } [, ...] )
UNIQUE、PRIMARY KEY以及EXCLUDE约束中的index_parameters是:
[ WITH ( storage_parameter [= value] [, ... ] ) ]
[ USING INDEX TABLESPACE tablespace_name ]
EXCLUDE约束中的exclude_element是:
{ column_name | ( expression ) } [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ]
参数说明
使用场景:非日志表不能保证数据的安全性,用户应该在确保数据已经做好备份的前提下使用,例如系统升级时进行数据的备份。
故障处理:当异常关机等操作导致非日志表上的索引发生数据丢失时,用户应该对发生错误的索引进行重建。
UNIQUE ( column_name [, ... ] ) (表约束):UNIQUE约束表示表里的一个字段或多个字段的组合必须在全表范围内唯一,对于唯一约束,NULL被认为是互不相等的;
PRIMARY KEY ( column_name [, ... ] ) (表约束):主键约束声明表中的一个或者多个字段只能包含唯一的非NULL值,一个表只能声明一个主键;
FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn [, ... ] ) ] [ MATCH matchtype ] [ ON DELETE action ] [ ON UPDATE action ] (表约束):
这些子句指定外键约束,表示新表的一列或列的组必须只包含能匹配引用中的表的某行在引用列上的值;
WITH子句还可以包括OIDS=TRUE(或者只包括OIDS)来指定新表的行应该具有被分配的 OID(对象标识符),或者包括OIDS=FALSE来指定新表的行不具有 OID。如果没有指定OIDS,默认设置取决于default_with_oids配置参数(如果新表是从任何具有 OID 的表继承而来,那么即使该命令要求OIDS=FALSE也会强制使用OIDS=TRUE)。
如果指定或者蕴含了OIDS=FALSE,新表就不会存储 OID 并且对插入其中的一个新行不会分配 OID。它将减少 OID 消耗并且因而推迟 32 为 OID 计数器的回卷。一旦计数器回卷,OID 就不再能被假定为唯一。另外,从一个表中排除 OID 可以减少存储该表所需的磁盘空间,减少的量是每行减少 4 字节(在大部分机器上),可以适当提高性能。
如果未指定DISTRIBUTE BY,则将选择具有UNIQUE约束的列作为分布键。果未指定此类列,则分布列是定义中第一个符合条件的列。如果未找到此类列,则该表将由ROUNDROBIN分发。
允许以下类型作为分布列:INT8、INT2、OID、INT4、BOOL、INT2VECTOR、OIDVECTOR、CHAR、NAME、TEXT、BPCHAR、BYTEA、VARCHAR、NUMERIC、MONEY、ABSTIME、RELTIME、DATE、TIME、TIMESTAMP、TIMESTAMPTZ、 INTERVAL 和 TIMETZ。
允许以下类型作为分布列:INT8、INT2、INT4、BOOL、ABSTIME、RELTIME、DATE。
注意事项
一个表的列通常不能超过1600列。
数据库为每一个唯一约束和主键约束创建一个索引来强制唯一性。因此,没有必要显式地为主键列创建一个索引。
范例
CREATE TABLE customer
(
ID int,
Name varchar(200),
Birthday date,
Tel varchar(50)
);
CREATE TABLE
相关语法
ALTER TABLE,DROP TABLE,CREATE TABLESPACE
功能描述
根据查询结果创建表。
语法格式
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name
[ (column_name [, ...] ) ]
[ WITH ( storage_parameter [= value] [, ... ] ) | WITH OIDS | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tablespace_name ]
[
DISTRIBUTE BY { REPLICATION | ROUNDROBIN | { [HASH | MODULO ] ( column_name ) } } |
DISTRIBUTED { { BY ( column_name ) } | { RANDOMLY } |
DISTSTYLE { EVEN | KEY | ALL } DISTKEY ( column_name )
]
[ TO { GROUP groupname | NODE ( nodename [, ... ] ) } ]
AS query
[ WITH [ NO ] DATA ]
参数说明
使用场景:非日志表不能保证数据的安全性,用户应该在确保数据已经做好备份的前提下使用,例如系统升级时进行数据的备份。
故障处理:当异常关机等操作导致非日志表上的索引发生数据丢失时,用户应该对发生错误的索引进行重建。
如果未指定DISTRIBUTE BY,则将选择具有UNIQUE约束的列作为分布键。果未指定此类列,则分布列是定义中第一个符合条件的列。如果未找到此类列,则该表将由ROUNDROBIN分发。
允许以下类型作为分布列:INT8、INT2、OID、INT4、BOOL、INT2VECTOR、OIDVECTOR、CHAR、NAME、TEXT、BPCHAR、BYTEA、VARCHAR、NUMERIC、MONEY、ABSTIME、RELTIME、DATE、TIME、TIMESTAMP、TIMESTAMPTZ、 INTERVAL 和 TIMETZ。不允许将浮点型作为分布列。
允许以下类型作为分布列:INT8、INT2、INT4、BOOL、ABSTIME、RELTIME、DATE。
注意事项
CREATE TABLE AS命令允许用户显式地指定 是否应该包括 OID。如果没有显式地指定 OID 的存在,将使用 default_with_oids配置变量来判断。
范例
CREATE TABLE ts_t2 AS SELECT * FROM t2 WHERE b<2;
语法兼容
CREATE TABLE AS符合 SQL标准。
相关语法
CREATE MATERIALIZED VIEW, CREATE TABLE, EXECUTE, SELECT, SELECT INTO, VALUES