华为云用户手册

  • pg_cancel_backend(pid int) 描述:取消一个后端的当前查询。 返回值类型:boolean 备注:pg_cancel_backend向由pid标识的后端进程发送一个查询取消(SIGINT)信号。一个活动的后端进程的PID可以从pg_stat_activity视图的pid字段找到,或者在服务器上用ps列出数据库进程。 示例: 1 2 3 4 5 6 7 8 9 10 11 SELECT pid FROM pg_stat_activity WHERE stmt_type ='RESET'; pid ----------------- 281471222065200 (1 row) SELECT pg_cancel_backend(281471222065200); pg_cancel_backend ------------------- t (1 row)
  • pg_wlm_jump_queue(pid int) 描述:调整任务到CN队列的最前端。 返回值类型:boolean 备注:如果成功,函数返回true,否则返回false。 示例: 1 2 3 4 5 6 7 8 9 10 11 SELECT pid FROM pg_stat_activity WHERE stmt_type ='RESET'; pid ----------------- 281471222065200 (1 row) SELECT pg_wlm_jump_queue(281471222065200); pg_wlm_jump_queue ------------------- t (1 row)
  • 示例 创建一个角色role1: 1 CREATE ROLE role1 IDENTIFIED BY '{password}'; 为用户role1创建一个同名schema,子命令创建的表films和winners的拥有者为role1: 1 2 3 4 CREATE SCHEMA AUTHORIZATION role1 CREATE TABLE films (title text, release date, awards text[]) CREATE VIEW winners AS SELECT title, release FROM films WHERE awards IS NOT NULL;
  • 参数说明 schema_name 模式名字。 模式名不能和当前数据库里其他的模式重名。 模式的名字不可以“pg_”开头。 取值范围:字符串,要符合标识符的命名规范。 AUTHORIZATION user_name 指定模式的所有者。当不指定schema_name时,把user_name当作模式名,此时user_name只能是角色名。 取值范围:已存在的用户名/角色名。 WITH PERM SPACE 'space_limit' 指定模式的永久表存储空间上限。当不指定space_limit时,则不限制。 取值范围:字符串格式为正整数+单位,单位当前支持K/M/G/T/P。解析后的数值以K为单位,且范围不能够超过64比特表示的有符号整数,即1KB~9007199254740991KB。 schema_element 在模式里创建对象的SQL语句。目前仅支持CREATE TABLE、CREATE VIEW、CREATE INDEX、CREATE PARTITION、GRANT子句。 子命令所创建的对象都被AUTHORIZATION子句指定的用户所拥有。 如果当前搜索路径上的模式中存在同名对象时,需要明确指定引用对象所在的模式。可以通过命令SHOW SEARCH_PATH来查看当前搜索路径上的模式。 在逻辑集群模式下,不支持schema_element,用户需要先创建Schema,再在该Schema中创建对象。
  • 语法格式 根据指定的名字创建模式: 1 2 CREATE SCHEMA schema_name [ AUTHORIZATION user_name ] [ WITH PERM SPACE 'space_limit'] [ schema_element [ ... ] ]; 根据用户名创建模式: 1 CREATE SCHEMA AUTHORIZATION user_name [ WITH PERM SPACE 'space_limit'] [ schema_element [ ... ] ];
  • 参数说明 WITH [ RECURSIVE ] with_query [, ...] 用于声明一个或多个可以在主查询中通过名字引用的子查询,相当于临时表。 如果声明了RECURSIVE,那么允许SELECT子查询通过名字引用它自己。 其中with_query的详细格式为: with_query_name [ ( column_name [, ...] ) ] AS ( {select | values | insert | update | delete} ) – with_query_name指定子查询生成的结果集名字,在查询中可使用该名称访问子查询的结果集。 – column_name指定子查询结果集中显示的列名。 – 每个子查询可以是SELECT,VALUES,INSERT,UPDATE或DELETE语句。 plan_hint子句 以/*+ */的形式在关键字后,用于对指定语句块生成的计划进行hint调优,详细用法请参见使用Plan Hint进行调优。 IGNORE 用于主键或者唯一约束冲突时忽略冲突的数据。 详细介绍参见UPSERT。 OVERWRITE 用于标识覆盖式插入方式,使用此种插入方式执行结束后,目标原数据被清空,只存在新插入的数据。 OVERWRITE支持指定列插入的功能,其他列为默认值,若无默认值则为NULL。 OVERWRITE不要和INSERT INTO这类实时写入的操作并发,否则实时写入数据有被意外清理的风险。 OVERWRITE适用于大批量数据导入场景,不建议用于少量数据的插入场景。 避免对同一张表执行并发insert overwrite操作,否则会出现类似报错“tuple concurrently updated.”。 如果集群正在扩缩容,且INSERT OVERWRITE的写入表需要执行数据重分布,则INSERT OVERWRITE会清除当前数据,并自动将插入的数据按扩缩容后的节点来进行数据分布。如果INSERT OVERWRITE和该表的数据重分布过程同时执行,INSERT OVERWRITE会中断该表的数据重分布过程。 table_name 要插入数据的目标表名。 取值范围:已存在的表名。 AS 用于给目标表table_name指定别名。alias即为别名的名字。 column_name 目标表中的字段名: 字段名可以有子字段名或者数组下标修饰。 没有在字段列表中出现的每个字段,将由系统默认值,或者声明时的默认值填充,若都没有则用NULL填充。例如,向一个复合类型中的某些字段插入数据的话,其他字段将是NULL。 目标字段(column_name)可以按顺序排列。如果没有列出任何字段,则默认全部字段,且顺序为表声明时的顺序。 如果value子句和query中只提供了N个字段,则目标字段为前N个字段。 value子句和query提供的值在表中从左到右关联到对应列。 取值范围:已存在的字段名。 expression 赋予对应column的一个有效表达式或值: 向表中字段插入单引号时需要使用单引号自身进行转义。 如果插入行的表达式不是正确的数据类型,系统试图进行类型转换,若转换不成功,则插入数据失败,系统返回错误信息。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 CREATE TABLE tt01 (id int,content varchar(50)); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using round-robin as the distribution mode by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE INSERT INTO tt01 values (1,'Jack say ''hello'''); INSERT 0 1 INSERT INTO tt01 values (2,'Rose do 50%'); INSERT 0 1 INSERT INTO tt01 values (3,'Lilei say ''world'''); INSERT 0 1 INSERT INTO tt01 values (4,'Hanmei do 100%'); INSERT 0 1 SELECT * FROM tt01; id | content ----+------------------- 3 | Lilei say 'world' 4 | Hanmei do 100% 1 | Jack say 'hello' 2 | Rose do 50% (4 rows) DEFAULT 对应字段名的缺省值。如果没有缺省值,则为NULL。 query 一个查询语句(SELECT语句),将查询结果作为插入的数据。 ON DUPLICATE KEY 用于主键或者唯一约束冲突时更新冲突的数据。 duplicate_action指定更新列和更新的数据。 详细介绍参见UPSERT。 ON CONFLICT 用于主键或者唯一约束冲突时忽略或者更新冲突的数据。 conflict_target用于指定列名index_column_name 、包含多个列名的表达式index_expression 或者约束名字constraint_name。作用是用于从列名、包含多个列名的表达式或者约束名推断是否有唯一索引。其中index_column_name和index_expression遵循CREATE INDEX的索引列格式。 conflict_action 指定主键或者唯一约束冲突时执行的策略。有两种: DO NOTHING冲突忽略。 DO UPDATE SET冲突更新。 后面指定更新列和更新的数据。 详细介绍参见UPSERT。 RETURNING 返回实际插入的行,RETURNING列表的语法与SELECT的输出列表一致。 output_expression INSERT命令在每一行都被插入之后用于计算输出结果的表达式。 取值范围:该表达式可以使用table的任意字段。可以使用*返回被插入行的所有字段。 output_name 字段的输出名称。 取值范围:字符串,符合标识符命名规范。
  • 注意事项 只有拥有表INSERT权限的用户,才可以向表中插入数据。 如果使用RETURNING子句,用户必须要有该表的SELECT权限。 如果使用QUERY子句插入来自查询里的数据行,用户还需要拥有在查询里使用的表的SELECT权限。 如果使用OVERWRITE子句覆盖式插入数据,用户还需要拥有该表的SELECT和TRUNCATE权限。 当连接到TD兼容的数据库时,td_compatible_truncation参数设置为on时,将启用超长字符串自动截断功能,在后续的insert语句中(不包含外表的场景下),对目标表中char和varchar类型的列上插入超长字符串时,系统会自动按照目标表中相应列定义的最大长度对超长字符串进行截断。 如果向字符集为字节类型编码(SQL_ASCII,LATIN1等)的数据库中插入多字节字符数据(如汉字等),且字符数据跨越截断位置,这种情况下,按照字节长度自动截断,自动截断后会在尾部产生非预期结果。如果用户有对于截断结果正确性的要求,建议用户采用UTF8等能够按照字符截断的输入字符集作为数据库的编码集。
  • 语法格式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [ WITH [ RECURSIVE ] with_query [, ...] ] INSERT [/*+ plan_hint */] [ IGNORE | OVERWRITE ] INTO table_name [ AS alias ] [ ( column_name [, ...] ) ] { DEFAULT VALUES | VALUES {( { expression | DEFAULT } [, ...] ) }[, ...] | query } [ ON DUPLICATE KEY duplicate_action | ON CONFLICT [ conflict_target ] conflict_action ] [ RETURNING {* | {output_expression [ [ AS ] output_name ] }[, ...]} ]; where duplicate_action can be: UPDATE { column_name = { expression | DEFAULT } | ( column_name [, ...] ) = ( { expression | DEFAULT } [, ...] ) } [, ...] and conflict_target can be one of: ( { index_column_name | ( index_expression ) } [ COLLATE collation ] [ opclass ] [, ...] ) [ WHERE index_predicate ] ON CONSTRAINT constraint_name and conflict_action is one of: DO NOTHING DO UPDATE SET { column_name = { expression | DEFAULT } | ( column_name [, ...] ) = ( { expression | DEFAULT } [, ...] ) } [, ...] [ WHERE condition ]
  • to_number ( expr [, fmt]) 描述:将expr按指定格式转换为一个NUMBER类型的值。 类型转换格式请参考表1。 转换十六进制字符串为十进制数字时,最多支持16个字节的十六进制字符串转换为无符号数。 转换十六进制字符串为十进制数字时,格式字符串中不允许出现除'x'或'X'以外的其他字符,否则报错。 返回值类型:number 示例: 1 2 3 4 5 SELECT to_number('12,454.8-', '99G999D9S'); to_number ----------- -12454.8 (1 row)
  • to_date(string, fmt) 描述:将字符串string按fmt指定格式转化为DATE类型的值。fmt格式可参考表2。 该函数不能直接支持CLOB类型,但是CLOB类型的参数能够通过隐式转换实现。 返回值类型:date 示例: 1 2 3 4 5 SELECT TO_DATE('05 Dec 2010','DD Mon YYYY'); to_date --------------------- 2010-12-05 00:00:00 (1 row)
  • to_timestamp(double precision) 描述:把UNIX纪元转换成时间戳。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 SELECT to_timestamp(1284352323); to_timestamp ------------------------ 2010-09-13 12:32:03+08 (1 row)
  • to_char (integer/number[, fmt]) 描述:将一个整型或者浮点类型的值转换为指定格式的字符串。 可选参数fmt可以为以下几类:十进制字符、“分组”符、正负号和货币符号,每类都可以有不同的模板,模板之间可以合理组合,常见的模板有:9、0、,(千分隔符)、.(小数点),可参考表1。 模板可以有类似FM的修饰词,但FM不抑制由模板0指定而输出的0。 要将整型类型的值转换成对应16进制值的字符串,使用模板“x”或“X”。 返回值类型:varchar 示例: 1 2 3 4 5 SELECT to_char(1485,'9,999'); to_char --------- 1,485 (1 row) 1 2 3 4 5 SELECT to_char( 1148.5,'9,999.999'); to_char ------------ 1,148.500 (1 row) 1 2 3 4 5 SELECT to_char(148.5,'990999.909'); to_char ------------- 0148.500 (1 row) 1 2 3 4 5 SELECT to_char(123,'XXX'); to_char --------- 7B (1 row)
  • to_clob(char/nchar/varchar/nvarchar/varchar2/nvarchar2/text/raw) 描述:将RAW类型或者文本字符集类型CHAR、NCHAR、VARCHAR、VARCHAR2、NVARCHAR2、TEXT转成CLOB类型。 返回值类型:clob 示例: 1 2 3 4 5 SELECT to_clob('ABCDEF'::RAW(10)); to_clob --------- ABCDEF (1 row) 1 2 3 4 5 SELECT to_clob('hello111'::CHAR(15)); to_clob ---------- hello111 (1 row) 1 2 3 4 5 SELECT to_clob('gauss123'::NCHAR(10)); to_clob ---------- gauss123 (1 row) 1 2 3 4 5 SELECT to_clob('gauss234'::VARCHAR(10)); to_clob ---------- gauss234 (1 row) 1 2 3 4 5 SELECT to_clob('gauss345'::VARCHAR2(10)); to_clob ---------- gauss345 (1 row) 1 2 3 4 5 SELECT to_clob('gauss456'::NVARCHAR2(10)); to_clob ---------- gauss456 (1 row) 1 2 3 4 5 SELECT to_clob('World222!'::TEXT); to_clob ----------- World222! (1 row)
  • to_char (datetime/interval [, fmt]) 描述:将一个DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE或者TIMESTAMP WITH LOCAL TIME ZONE类型的DATETIME或者INTERVAL值按照fmt指定的格式转换为VARCHAR类型。 可选参数fmt可以为以下几类:日期、时间、星期、季度和世纪。每类都可以有不同的模板,模板之间可以合理组合,常见的模板有:HH、MM、SS、YYYY、MM、DD,可参考表2。 模板可以有修饰词,常用的修饰词是FM,可以用来抑制前导的零或尾随的空白。 返回值类型:varchar 示例: 1 2 3 4 5 SELECT to_char(current_timestamp,'HH12:MI:SS'); to_char ---------- 10:19:26 (1 row) 1 2 3 4 5 SELECT to_char(current_timestamp,'FMHH12:FMMI:FMSS'); to_char ---------- 10:19:46 (1 row)
  • try_cast(x as type) 描述:将x转换成给定的type类型值,若转换失败且当前类型转换为 GaussDB (DWS)允许的转换,则返回NULL,否则报错。该函数仅8.2.0及以上集群版本支持。 示例: 1 2 3 4 5 6 7 8 9 postgres=# SELECT cast('a' as int); ERROR: invalid input syntax for integer: "a" LINE 1: SELECT cast('a' as int); ^ CONTEXT: referenced column: int4 postgres=# SELECT try_cast('a' as int); int4 ------ (1 row)
  • 浮点类型 浮点类型属于非精确,可变精度的数值类型。实际上,这些类型通常是对于二进制浮点算术(分别是单精度和双精度)的IEEE标准754的具体实现,在一定范围内由特定的处理器,操作系统和编译器所支持。 表3 浮点类型 名称 描述 存储空间 范围 REAL, FLOAT4 单精度浮点数,不精准。 4字节 6位十进制数字精度。 DOUBLE PRECISION, FLOAT8 双精度浮点数,不精准。 8字节 1E-307~1E+308, 15位十进制数字精度。 FLOAT[(p)] 浮点数,不精准。精度p取值范围为[1,53]。 说明: p为精度,表示总位数。 4字节或8字节 根据精度p不同选择REAL或DOUBLE PRECISION作为内部表示。如不指定精度,内部用DOUBLE PRECISION表示。 BINARY_DOUBLE 是DOUBLE PRECISION的别名,为兼容Oracle类型。 8字节 1E-307~1E+308, 15位十进制数字精度。 DEC[(p[,s])] 精度p取值范围为[1,1000],标度s取值范围为[0,p]。 说明: p为总位数,s为小数位位数。 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。 INTEGER[(p[,s])] 精度p取值范围为[1,1000],标度s取值范围为[0,p]。 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。 示例: 创建带有浮点类型的表。 1 2 3 4 5 6 7 8 9 10 CREATE TABLE float_type_t2 ( FT_COL1 INTEGER, FT_COL2 FLOAT4, FT_COL3 FLOAT8, FT_COL4 FLOAT(3), FT_COL5 BINARY_DOUBLE, FT_COL6 DECIMAL(10,4), FT_COL7 INTEGER(6,3) ) DISTRIBUTE BY HASH ( ft_col1); 插入数据。 1 INSERT INTO float_type_t2 VALUES(10,10.365456,123456.1234,10.3214, 321.321, 123.123654, 123.123654); 查看数据。 1 2 3 4 5 SELECT * FROM float_type_t2; ft_col1 | ft_col2 | ft_col3 | ft_col4 | ft_col5 | ft_col6 | ft_col7 ---------+---------+-------------+---------+---------+----------+--------- 10 | 10.3655 | 123456.1234 | 10.3214 | 321.321 | 123.1237 | 123.124 (1 row)
  • 序列整型 SMALLSERIAL,SERIAL和BIGSERIAL类型不是真正的类型,只是为在表中设置唯一标识而存在的概念。因此,创建一个整数字段,并且把它的缺省数值安排为从一个序列发生器读取。应用了一个NOT NULL约束以确保NULL不会被插入。在大多数情况下用户可能还希望附加一个UNIQUE或PRIMARY KEY约束避免意外地插入重复的数值。最后,将序列发生器从属于那个字段,这样当该字段或表被删除的时候也一并删除该序列。目前只支持在创建表时指定SERIAL列,不可以在已有的表中增加SERIAL列。另外临时表也不支持创建SERIAL列。因为SERIAL不是真正的类型,也不可以将表中存在的列类型转化为SERIAL。 表4 序列整型 名称 描述 存储空间 范围 SMALLSERIAL 二字节序列整型。 2字节 1 ~ 32,767 SERIAL 四字节序列整型。 4字节 1 ~ 2,147,483,647 BIGSERIAL 八字节序列整型。 8字节 1 ~ 9,223,372,036,854,775,807 示例: 创建带有序列类型的表。 1 CREATE TABLE smallserial_type_tab(a SMALLSERIAL); 插入数据。 1 INSERT INTO smallserial_type_tab VALUES(default); 再次插入数据。 1 INSERT INTO smallserial_type_tab VALUES(default); 查看数据。 1 2 3 4 5 6 SELECT * FROM smallserial_type_tab; a --- 1 2 (2 rows) 插入NULL值会报错。 1 2 INSERT INTO smallserial_type_tab VALUES(NULL); ERROR: dn_6001_6002: null value in column "a" violates not-null constraint
  • 任意精度型 NUMBER类型能够用于存储对于精度位数没有限制的数字,并且可以用于执行精确计算。当要求高精确度时,推荐使用这种类型来存储货币总量和其他类型的数量值。与整数类型相比,任意精度类型需要更大的存储空间,其存储效率、运算效率以及压缩比效果都要差一些。 NUMBER类型数值的范围是小数点右边部分的小数位数。NUMBER类型数值的精度是指整个数值包含的所有数字,也就是小数点左右两边的所有数字。所以,可以说数值23.1234的精度为6,范围是4。可以认为整数的范围是0。 使用Numeric/Decimal进行列定义时,建议指定该列的精度p(总位数)以及范围s(小数位数)。 如果数值的精度或者范围大于列的数据类型所声明的精度和范围,那么系统将会试图对这个值进行四舍五入。如果不能对数值进行四舍五入的处理来满足数据类型的限制,则会报错。 表2 任意精度型 名称 描述 存储空间 范围 NUMERIC[(p[,s])], DECIMAL[(p[,s])] 精度p取值范围为[1,1000],标度s取值范围为[0,p]。 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。 NUMBER[(p[,s])] NUMERIC类型的别名,为兼容Oracle数据类型。 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。 示例: 创建带有DECIMAL数值类型的表。 1 CREATE TABLE decimal_type_t1 (DT_COL1 DECIMAL(10,4)); 插入数据。 1 2 INSERT INTO decimal_type_t1 VALUES(123456.122331); INSERT INTO decimal_type_t1 VALUES(123456.452399); 查看数据。 1 2 3 4 5 6 SELECT * FROM decimal_type_t1; dt_col1 ------------- 123456.1223 123456.4524 (2 rows)
  • 整数类型 TINYINT、SMALLINT、INTEGER、BINARY_INTEGER和BIGINT类型存储整个数值(不带有小数部分),也就是整数。如果尝试存储超出范围以外的数值将会导致错误。 常用的类型是INTEGER,一般只有取值范围确定不超过SMALLINT的情况下,才会使用SMALLINT类型。而只有在INTEGER的范围不够的时候才使用BIGINT,因为前者相对快得多。 表1 整数类型 名称 描述 存储空间 范围 TINYINT 微整数,别名为INT1。 1字节 0 ~ 255 SMALLINT 小范围整数,别名为INT2。 2字节 -32,768 ~ +32,767 INTEGER 常用的整数,别名为INT4。 4字节 -2,147,483,648 ~ +2,147,483,647 BINARY_INTEGER 常用的整数INTEGER的别名,为兼容Oracle类型。 4字节 -2,147,483,648 ~ +2,147,483,647 BIGINT 大范围的整数,别名为INT8。 8字节 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 示例: 创建带有TINYINT、INTEGER、BIGINT类型数据的表。 1 2 3 4 5 6 7 CREATE TABLE int_type_t1 ( a TINYINT, b TINYINT, c INTEGER, d BIGINT ); 插入数据。 1 INSERT INTO int_type_t1 VALUES(100, 10, 1000, 10000); 查看数据。 1 2 3 4 5 SELECT * FROM int_type_t1; a | b | c | d -----+----+------+------- 100 | 10 | 1000 | 10000 (1 row)
  • 对象标识符类型 GaussDB(DWS)在内部使用对象标识符(OID)作为各种系统表的主键。系统不会给用户创建的表增加一个OID系统字段,OID类型代表一个对象标识符。 目前OID类型用一个四字节的无符号整数实现。因此不建议在创建的表中使用OID字段做主键。 表1 对象标识符类型 名称 引用 描述 示例 OID - 数字化的对象标识符。 564182 CID - 命令标识符。它是系统字段cmin和cmax的数据类型。命令标识符是32位的量。 - XID - 事务标识符。它是系统字段xmin和xmax的数据类型。事务标识符也是32位的量。 - TID - 行标识符。它是系统表字段ctid的数据类型。行ID是一对数值(块号,块内的行索引),它标识该行在其所在表内的物理位置。 - REGCONFIG pg_ts_config 文本搜索配置。 english REGDICTIONARY pg_ts_dict 文本搜索字典。 simple REGOPER pg_operator 操作符名。 + REGOPERATOR pg_operator 带参数类型的操作符。 *(integer,integer)或-(NONE,integer) REGPROC pg_proc 函数名字。 sum REGPROCEDURE pg_proc 带参数类型的函数。 sum(int4) REGCLASS pg_class 关系名。 pg_type REGTYPE pg_type 数据类型名。 integer OID类型:主要作为数据库系统表中字段使用。 示例: 1 2 3 4 5 SELECT oid FROM pg_class WHERE relname = 'pg_type'; oid ------ 1247 (1 row) OID别名类型REGCLASS:主要用于对象OID值的简化查找。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 SELECT attrelid,attname,atttypid,attstattarget FROM pg_attribute WHERE attrelid = 'pg_type'::REGCLASS; attrelid | attname | atttypid | attstattarget ----------+----------------+----------+--------------- 1247 | xc_node_id | 23 | 0 1247 | tableoid | 26 | 0 1247 | cmax | 29 | 0 1247 | xmax | 28 | 0 1247 | cmin | 29 | 0 1247 | xmin | 28 | 0 1247 | oid | 26 | 0 1247 | ctid | 27 | 0 1247 | typname | 19 | -1 1247 | typnamespace | 26 | -1 1247 | typowner | 26 | -1 1247 | typlen | 21 | -1 1247 | typbyval | 16 | -1 1247 | typtype | 18 | -1 1247 | typcategory | 18 | -1 1247 | typispreferred | 16 | -1 1247 | typisdefined | 16 | -1 1247 | typdelim | 18 | -1 1247 | typrelid | 26 | -1 1247 | typelem | 26 | -1 1247 | typarray | 26 | -1 1247 | typinput | 24 | -1 1247 | typoutput | 24 | -1 1247 | typreceive | 24 | -1 1247 | typsend | 24 | -1 1247 | typmodin | 24 | -1 1247 | typmodout | 24 | -1 1247 | typanalyze | 24 | -1 1247 | typalign | 18 | -1 1247 | typstorage | 18 | -1 1247 | typnotnull | 16 | -1 1247 | typbasetype | 26 | -1 1247 | typtypmod | 23 | -1 1247 | typndims | 23 | -1 1247 | typcollation | 26 | -1 1247 | typdefaultbin | 194 | -1 1247 | typdefault | 25 | -1 1247 | typacl | 1034 | -1 (38 rows) 父主题: 数据类型
  • 注意事项 当前会话的用户必须是指定的rolename角色的成员,但系统管理员可以选择任何角色。 使用SET ROLE命令,它可能会增加一个用户的权限,也可能会限制一个用户的权限。如果会话用户的角色有INHERITS属性,则它自动拥有它能SET ROLE变成的角色的所有权限;在这种情况下,SET ROLE实际上是删除了所有直接赋予会话用户的权限,以及它的所属角色的权限,只剩下指定角色的权限。另一方面,如果会话用户的角色有NOINHERITS属性,SET ROLE删除直接赋予会话用户的权限,而获取指定角色的权限。
  • 示例 创建一个GBK编码的数据库music(本地环境的编码格式必须也为GBK): 1 CREATE DATABASE music ENCODING 'GBK' template = template0; 创建数据库music2,并指定所有者为jim: 1 CREATE DATABASE music2 OWNER jim; 用模板template0创建数据库music3,并指定所有者为jim: 1 CREATE DATABASE music3 OWNER jim TEMPLATE template0; 创建兼容ORA格式的数据库: 1 CREATE DATABASE ora_compatible_db DBCOMPATIBILITY 'ORA';
  • 语法格式 1 2 3 4 5 6 7 8 9 CREATE DATABASE database_name [ [ WITH ] { [ OWNER [=] user_name ] | [ TEMPLATE [=] template ] | [ ENCODING [=] encoding ] | [ LC_COLLATE [=] lc_collate ] | [ LC_CTYPE [=] lc_ctype ] | [ DBCOMPATIBILITY [=] compatibilty_type ] | [ CONNECTION LIMIT [=] connlimit ]}[...] ];
  • 参数说明 name 将要修改的序列名称。 IF EXISTS 当序列不存在时使用该选项不会出现错误消息,仅有一个通知。 MAXVALUE maxvalue | NO MAXVALUE 序列所能达到的最大值。如果声明了NO MAXVALUE,则递增序列的缺省值为263-1,递减序列的缺省值为-1。NOMAXVALUE等价于NO MAXVALUE。 OWNED BY 将序列和一个表的指定字段进行关联。这样,在删除指定字段或其所在表的时候会自动删除已关联的序列。 如果序列已经和表有关联后,使用OWNED BY参数后新的关联关系会覆盖旧的关联。 关联的表和序列的所有者必须是同一个用户,并且在同一个模式中。 使用OWNED BY NONE将删除任何已经存在的关联。 new_owner 序列新所有者的用户名。用户要修改序列的所有者,必须是新角色的直接或者间接成员,并且所有者角色必须有序列所在模式上的CREATE权限。
  • 语法格式 修改序列最大值或归属列 1 2 3 ALTER SEQUENCE [ IF EXISTS ] name [ MAXVALUE maxvalue | NO MAXVALUE | NOMAXVALUE ] [ OWNED BY { table_name.column_name | NONE } ] ; 修改序列的拥有者 1 ALTER SEQUENCE [ IF EXISTS ] name OWNER TO new_owner;
  • 注意事项 使用ALTER SEQUENCE的用户必须是该序列的所有者。 当前版本仅支持修改拥有者、归属列和最大值。若要修改其他参数,可以删除重建,并用Setval函数恢复当前值。 ALTER SEQUENCE MAXVALUE不支持在事务、函数和存储过程中使用。 修改序列的最大值后,会清空该序列在所有会话的cache。 ALTER SEQUENCE会阻塞nextval、setval、currval和lastval的调用。
  • 示例 Synonym词典可用于解决语言学相关问题,例如,为避免使单词"Paris"变成"pari",可在Synonym词典文件中定义一行"Paris paris",并将该词典放置在预定义的english_stem词典之前。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 SELECT * FROM ts_debug('english', 'Paris'); alias | description | token | dictionaries | dictionary | lexemes -----------+-----------------+-------+----------------+--------------+--------- asciiword | Word, all ASCII | Paris | {english_stem} | english_stem | {pari} (1 row) CREATE TEXT SEARCH DICTIONARY my_synonym ( TEMPLATE = synonym, SYNONYMS = my_synonyms, FILEPATH = 'obs://bucket01/obs.xxx.xxx.com accesskey=xxxxx secretkey=xxxxx region=cn-north-1' ); ALTER TEXT SEARCH CONFIGURATION english ALTER MAPPING FOR asciiword WITH my_synonym, english_stem; SELECT * FROM ts_debug('english', 'Paris'); alias | description | token | dictionaries | dictionary | lexemes -----------+-----------------+-------+---------------------------+------------+--------- asciiword | Word, all ASCII | Paris | {my_synonym,english_stem} | my_synonym | {paris} (1 row) SELECT * FROM ts_debug('english', 'paris'); alias | description | token | dictionaries | dictionary | lexemes -----------+-----------------+-------+---------------------------+------------+--------- asciiword | Word, all ASCII | Paris | {my_synonym,english_stem} | my_synonym | {paris} (1 row) ALTER TEXT SEARCH DICTIONARY my_synonym ( CASESENSITIVE=true); SELECT * FROM ts_debug('english', 'Paris'); alias | description | token | dictionaries | dictionary | lexemes -----------+-----------------+-------+---------------------------+------------+--------- asciiword | Word, all ASCII | Paris | {my_synonym,english_stem} | my_synonym | {paris} (1 row) SELECT * FROM ts_debug('english', 'paris'); alias | description | token | dictionaries | dictionary | lexemes -----------+-----------------+-------+---------------------------+------------+--------- asciiword | Word, all ASCII | Paris | {my_synonym,english_stem} | my_synonym | {pari} (1 row) 其中,同义词词典文件全名为my_synonyms.syn,所在目录为 'obs://bucket01/obs.xxx.xxx.com accesskey=xxxxx secretkey=xxxxx region=cn-north-1'。关于创建词典的语法和更多参数,请参见CREATE TEXT SEARCH DICTIONARY。 星号(*)可用于词典文件中的同义词结尾,表示该同义词是一个前缀。在to_tsvector()中该星号将被忽略,但在to_tsquery()中会匹配该前缀并对应输出结果(参照处理查询一节)。 假设词典文件synonym_sample.syn内容如下: 1 2 3 4 5 postgres pgsql postgresql pgsql postgre pgsql gogle googl indices index* 创建并使用词典: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 CREATE TEXT SEARCH DICTIONARY syn ( TEMPLATE = synonym, SYNONYMS = synonym_sample ); SELECT ts_lexize('syn','indices'); ts_lexize ----------- {index} (1 row) CREATE TEXT SEARCH CONFIGURATION tst (copy=simple); ALTER TEXT SEARCH CONFIGURATION tst ALTER MAPPING FOR asciiword WITH syn; SELECT to_tsvector('tst','indices'); to_tsvector ------------- 'index':1 (1 row) SELECT to_tsquery('tst','indices'); to_tsquery ------------ 'index':* (1 row) SELECT 'indexes are very useful'::tsvector; tsvector --------------------------------- 'are' 'indexes' 'useful' 'very' (1 row) SELECT 'indexes are very useful'::tsvector @@ to_tsquery('tst','indices'); ?column? ---------- t (1 row)
  • 语法格式 设置外表属性 1 2 ALTER FOREIGN TABLE [ IF EXISTS ] table_name OPTIONS ( {[ ADD | SET | DROP ] option ['value']}[, ... ]); 设置新的所有者 1 2 ALTER FOREIGN TABLE [ IF EXISTS ] tablename OWNER TO new_owner;
  • 参数说明 expression 用于计算或插入结果表指定地点的常量或者表达式。 在一个出现在INSERT顶层的VALUES列表中,expression可以被DEFAULT替换以表示插入目的字段的缺省值。除此以外,当VALUES出现在其他场合的时候是不能使用DEFAULT的。 sort_expression 一个表示如何排序结果行的表达式或者整数常量。 ASC 指定按照升序排列。 DESC 指定按照降序排列。 operator 一个排序操作符。 count 返回的最大行数。 start 开始返回行之前忽略的行数。 FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY FETCH子句限定返回查询结果从第一行开始的总行数,count的缺省值为1。
  • 语法格式 1 2 3 4 VALUES {( expression [, ...] )} [, ...] [ ORDER BY { sort_expression [ ASC | DESC | USING operator ] } [, ...] ] [ { [ LIMIT { count | ALL } ] [ OFFSET start [ ROW | ROWS ] ] } | { LIMIT start, { count | ALL } } ] [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ];
共100000条