华为云用户手册

  • 语法格式 从一个文件拷贝数据到一个表。 123456789 COPY table_name [ ( column_name [, ...] ) ] FROM { 'filename' | STDIN } [ [ USING ] DELIMITERS 'delimiters' ] [ WITHOUT ESCAPING ] [ LOG ERRORS ] [ REJECT LIMIT 'limit' ] [ [ WITH ] ( option [, ...] ) ] | copy_option | FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [ ...] ] ]; 语法中的FIXED FORMATTER ( { column_name( offset, length ) } [, ...] )以及 [ ( option [, ...] ) | copy_option [ ...] ] 可以任意排列组合。 把一个表的数据拷贝到一个文件。 1 2 3 4 5 6 7 8 91011121314 COPY table_name [ ( column_name [, ...] ) ] TO { 'filename' | STDOUT } [ [ USING ] DELIMITERS 'delimiters' ] [ WITHOUT ESCAPING ] [ [ WITH ] ( option [, ...] ) ] | copy_option | FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [ ...] ] ];COPY query TO { 'filename' | STDOUT } [ WITHOUT ESCAPING ] [ [ WITH ] ( option [, ...] ) ] | copy_option | FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [ ...] ] ]; COPY TO语法形式约束如下: (query)与[USING] DELIMITER不兼容,即若COPY TO的数据来自于一个query的查询结果,那么COPY TO语法不能再指定[USING] DELIMITERS语法子句。 对于FIXED FORMATTTER语法后面跟随的copy_option是以空格进行分隔的。 copy_option是指COPY原生的参数形式,而option是兼容外表导入的参数形式。 语法中的FIXED FORMATTER ( { column_name( offset, length ) } [, ...] )以及 [ ( option [, ...] ) | copy_option [ ...] ] 可以任意排列组合。 其中可选参数option子句语法为: 1 2 3 4 5 6 7 8 9101112131415161718192021 FORMAT 'format_name'| OIDS [ boolean ]| DELIMITER 'delimiter_character'| NULL 'null_string'| HEADER [ boolean ]| FILEHEADER 'header_file_string'| FREEZE [ boolean ]| QUOTE 'quote_character'| ESCAPE 'escape_character'| EOL 'newline_character'| NOESCAPING [ boolean ]| FORCE_QUOTE { ( column_name [, ...] ) | * }| FORCE_NOT_NULL ( column_name [, ...] )| ENCODING 'encoding_name'| IGNORE_EXTRA_DATA [ boolean ]| FILL_MISSING_FIELDS [ boolean ]| COMPATIBLE_ILLEGAL_CHARS [ boolean ]| DATE_FORMAT 'date_format_string'| TIME_FORMAT 'time_format_string'| TIMESTAMP_FORMAT 'timestamp_format_string'| SMALLDATETIME_FORMAT 'smalldatetime_format_string' 其中可选参数copy_option子句语法为: 1 2 3 4 5 6 7 8 91011121314151617181920 OIDS | NULL 'null_string' | HEADER | FILEHEADER 'header_file_string' | FREEZE | FORCE_NOT_NULL column_name [, ...]| FORCE_QUOTE { column_name [, ...] | * }| BINARY | CSV | QUOTE [ AS ] 'quote_character' | ESCAPE [ AS ] 'escape_character' | EOL 'newline_character'| ENCODING 'encoding_name' | IGNORE_EXTRA_DATA | FILL_MISSING_FIELDS| COMPATIBLE_ILLEGAL_CHARS | DATE_FORMAT 'date_format_string' | TIME_FORMAT 'time_format_string' | TIMESTAMP_FORMAT 'timestamp_format_string' | SMALLDATETIME_FORMAT 'smalldatetime_format_string'
  • 参数说明 UNIQUE 创建唯一性索引,每次添加数据时检测表中是否有重复值。如果插入或更新的值会引起重复的记录时,将导致一个错误。 目前只有行存表B-tree索引支持唯一索引。 schema_name 模式的名称。 取值范围:已存在模式名。 index_name 要创建的索引名,不能包含模式名,索引的模式与表相同。 取值范围:字符串,要符合标识符的命名规范。 table_name 需要为其创建索引的表的名称,可以用模式修饰。 取值范围:已存在的表名。 USING method 指定创建索引的方法。 取值范围: btree:B-tree索引使用一种类似于B+树的结构来存储数据的键值,通过这种结构能够快速的查找索引。btree适合支持比较查询以及查询范围。 gin:GIN索引是倒排索引,可以处理包含多个键的值(比如数组)。 gist:Gist索引适用于几何和地理等多维数据类型和集合数据类型。 Psort:Psort索引。针对列存表进行局部排序索引。 行存表支持的索引类型:btree(行存表缺省值)、gin、gist。列存表支持的索引类型:Psort(列存表缺省值)、btree、gin。 column_name 表中需要创建索引的列的名称(字段名)。 如果索引方式支持多字段索引,可以声明多个字段。全局索引最多可以声明31个字段,其他索引最多可以声明32个字段。 expression 创建一个基于该表的一个或多个字段的表达式索引,通常必须写在圆括弧中。如果表达式有函数调用的形式,圆括弧可以省略。 表达式索引可用于获取对基本数据的某种变形的快速访问。比如,一个在upper(col)上的函数索引将允许WHERE upper(col) = 'JIM'子句使用索引。 在创建表达式索引时,如果表达式中包含IS NULL子句,则这种索引是无效的。此时,建议用户尝试创建一个部分索引。 COLLATE collation COLLATE子句指定列的排序规则(该列必须是可排列的数据类型)。如果没有指定,则使用默认的排序规则。排序规则可以使用“select * from pg_collation”命令从pg_collation系统表中查询,默认的排序规则为查询结果中以default开始的行。 opclass 操作符类的名称。对于索引的每一列可以指定一个操作符类,操作符类标识了索引那一列的使用的操作符。例如一个B-tree索引在一个四字节整数上可以使用int4_ops;这个操作符类包括四字节整数的比较函数。实际上对于列上的数据类型默认的操作符类是足够用的。操作符类主要用于一些有多种排序的数据。例如,用户想按照绝对值或者实数部分排序一个复数。能通过定义两个操作符类然后当建立索引时选择合适的类。 ASC 指定按升序排序 (默认)。 DESC 指定按降序排序。 NULLS FIRST 指定空值在排序中排在非空值之前,当指定DESC排序时,本选项为默认的。 NULLS LAST 指定空值在排序中排在非空值之后,未指定DESC排序时,本选项为默认的。 WITH ( {storage_parameter = value} [, ... ] ) 指定索引方法的存储参数。 取值范围: 只有GIN索引支持FASTUPDATE,GIN_PENDING_LIST_LIMIT参数。GIN和Psort之外的索引都支持FILLFACTOR参数。 FILLFACTOR 一个索引的填充因子(fillfactor)是一个介于10和100之间的百分数。 取值范围:10~100 FASTUPDATE GIN索引是否使用快速更新。 取值范围:ON,OFF 默认值:ON GIN_PENDING_LIST_LIMIT 当GIN索引启用fastupdate时,设置该索引pending list容量的最大值。 取值范围:64~2147483647‬,单位KB。 默认值:gin_pending_list_limit的默认取决于GUC中gin_pending_list_limit的值(默认为4MB) TABLESPACE tablespace_name 指定索引的表空间,如果没有声明则使用默认的表空间。 取值范围:已存在的表空间名。 WHERE predicate 创建一个部分索引。部分索引是一个只包含表的一部分记录的索引,通常是该表中比其他部分数据更有用的部分。例如,有一个表,表里包含已记账和未记账的定单,未记账的定单只占表的一小部分而且这部分是最常用的部分,此时就可以通过只在未记账部分创建一个索引来改善性能。另外一个可能的用途是使用带有UNIQUE的WHERE强制一个表的某个子集的唯一性。 取值范围:predicate表达式只能引用表的字段,它可以使用所有字段,而不仅是被索引的字段。目前,子查询和聚集表达式不能出现在WHERE子句里。 PARTITION index_partition_name 索引分区的名称。 取值范围:字符串,要符合标识符的命名规范。 TABLESPACE index_partition_tablespace 索引分区的表空间。 取值范围:如果没有声明,将使用分区表索引的表空间index_tablespace。
  • 优化建议 create index 建议仅在匹配如下条件之一时创建索引: 经常执行查询的字段。 在连接条件上创建索引,对于存在多字段连接的查询,建议在这些字段上建立组合索引。例如,select * from t1 join t2 on t1.a=t2.a and t1.b=t2.b,可以在t1表上的a,b字段上建立组合索引。 where子句的过滤条件字段上(尤其是范围条件)。 在经常出现在order by、group by和distinct后的字段。 约束限制: 分区表上不支持创建部分索引、不支持NULL FIRST特性。 在分区表上创建唯一索引时,索引项中必须包含分布列和所有分区键。
  • 语法格式 在表上创建索引。 12345 CREATE [ UNIQUE ] INDEX [ [schemaname.]index_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 ]; 在分区表上创建索引。 12345 CREATE [ UNIQUE ] INDEX [ [schemaname.]index_name ] ON table_name [ USING method ] ( {{ column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS LAST ] }[, ...] ) LOCAL [ ( { PARTITION index_partition_name [ TABLESPACE index_partition_tablespace ] } [, ...] ) ] [ WITH ( { storage_parameter = value } [, ...] ) ] [ TABLESPACE tablespace_name ];
  • 功能描述 在指定的表上创建索引。 索引可以用来提高数据库查询性能,但是不恰当的使用将导致数据库性能下降。建议仅在匹配如下某条原则时创建索引: 经常执行查询的字段。 在连接条件上创建索引,对于存在多字段连接的查询,建议在这些字段上建立组合索引。例如,select * from t1 join t2 on t1.a=t2.a and t1.b=t2.b,可以在t1表上的a,b字段上建立组合索引。 where子句的过滤条件字段上(尤其是范围条件)。 在经常出现在order by、group by和distinct后的字段。 在分区表上创建索引与在普通表上创建索引的语法不太一样,使用时请注意,如分区表上不支持并行创建索引、不支持创建部分索引、不支持NULL FIRST特性。
  • 注意事项 索引自身也占用存储空间、消耗计算资源,创建过多的索引将对数据库性能造成负面影响(尤其影响数据导入的性能,建议在数据导入后再建索引)。因此,仅在必要时创建索引。 索引定义里的所有函数和操作符都必须是immutable类型的,即它们的结果必须只能依赖于它们的输入参数,而不受任何外部的影响(如另外一个表的内容或者当前时间)。这个限制可以确保该索引的行为是定义良好的。要在一个索引上或WHERE中使用用户定义函数,请把它标记为immutable类型函数。 在分区表上创建唯一索引时,索引项中必须包含分布列和所有分区键。 列存表支持的PSORT和B-tree索引都不支持创建表达式索引、部分索引和唯一索引。 列存表支持的GIN索引支持创建表达式索引,但表达式不能包含空分词、空列和多列,不支持创建部分索引和唯一索引。
  • 示例 1 2 3 4 5 6 7 8 9101112131415 --建立外表,用来以TEXT格式导入GDS服务器192.168.0.90和192.168.0.91上的数据,导入过程错误信息将记录到err_HR_staffS中。postgres=# CREATE FOREIGN TABLE foreign_HR_staffS( staff_ID NUMBER(6) , FIRST_NAME VARCHAR2(20), LAST_NAME VARCHAR2(25), EMAIL VARCHAR2(25), PHONE_NUMBER VARCHAR2(20), HIRE_DATE DATE, employment_ID VARCHAR2(10), SALARY NUMBER(8,2), COMMISSION_PCT NUMBER(2,2), MANAGER_ID NUMBER(6), section_ID NUMBER(4)) SERVER gsmpp_server OPTIONS (location 'gsfs://192.168.0.90:5000/* | gsfs://192.168.0.91:5000/*', format 'TEXT', delimiter E'\x08', null '') WITH err_HR_staffS; 1 2 3 4 5 6 7 8 9101112131415 --建立外表,用来以TEXT格式导入GDS服务器192.168.0.90和192.168.0.91上的数据,导入过程错误信息将记录到err_HR_staffS中。本次数据导入允许出现的数据格式错误个数为2。CREATE FOREIGN TABLE foreign_HR_staffS_ft3( staff_ID NUMBER(6) , FIRST_NAME VARCHAR2(20), LAST_NAME VARCHAR2(25), EMAIL VARCHAR2(25), PHONE_NUMBER VARCHAR2(20), HIRE_DATE DATE, employment_ID VARCHAR2(10), SALARY NUMBER(8,2), COMMISSION_PCT NUMBER(2,2), MANAGER_ID NUMBER(6), section_ID NUMBER(4)) SERVER gsmpp_server OPTIONS (location 'gsfs://192.168.0.90:5000/* | gsfs://192.168.0.91:5000/*', format 'TEXT', delimiter E'\x08', null '',reject_limit '2') WITH err_HR_staffS_ft3; 1 2 3 4 5 6 7 8 9101112131415 --建立外表,用来以CSV格式导入input_data目录下存放在各个节点名文件下的所有文件。postgres=# CREATE FOREIGN TABLE foreign_HR_staffS_ft1( staff_ID NUMBER(6) , FIRST_NAME VARCHAR2(20), LAST_NAME VARCHAR2(25), EMAIL VARCHAR2(25), PHONE_NUMBER VARCHAR2(20), HIRE_DATE DATE, employment_ID VARCHAR2(10), SALARY NUMBER(8,2), COMMISSION_PCT NUMBER(2,2), MANAGER_ID NUMBER(6), section_ID NUMBER(4)) SERVER gsmpp_server OPTIONS (location 'file:///input_data/*', format 'csv', mode 'private', delimiter ',') WITH err_HR_staffS_ft1; 1 2 3 4 5 6 7 8 9101112131415 --建立外表,用来以CSV格式导出数据到output_data目录下。postgres=# CREATE FOREIGN TABLE foreign_HR_staffS_ft2( staff_ID NUMBER(6) , FIRST_NAME VARCHAR2(20), LAST_NAME VARCHAR2(25), EMAIL VARCHAR2(25), PHONE_NUMBER VARCHAR2(20), HIRE_DATE DATE, employment_ID VARCHAR2(10), SALARY NUMBER(8,2), COMMISSION_PCT NUMBER(2,2), MANAGER_ID NUMBER(6), section_ID NUMBER(4)) SERVER gsmpp_server OPTIONS (location 'file:///output_data/', format 'csv', delimiter '|', header 'on') WRITE ONLY; 12345 --删除外表。postgres=# DROP FOREIGN TABLE foreign_HR_staffS;postgres=# DROP FOREIGN TABLE foreign_HR_staffS_ft1;postgres=# DROP FOREIGN TABLE foreign_HR_staffS_ft2;postgres=# DROP FOREIGN TABLE foreign_HR_staffS_ft3;
  • 参数概览 创建外表语法提供了多个参数,常用参数分类如下。 必需参数 table_name column_name type_name SERVER gsmpp_server OPTIONS可选参数 可选参数 外表的数据源位置参数location 数据格式参数 format header(仅支持CSV,FIXED格式) fileheader(仅支持CSV,FIXED格式) out_filename_prefix delimiter quote(仅支持CSV格式) escape(仅支持CSV格式) null noescaping(仅支持TEXT格式) encoding eol 容错性参数 fill_missing_fields ignore_extra_data reject_limit compatible_illegal_chars WITH error_table_name LOG INTO error_table_nam... REMOTE LOG 'name' PER NODE REJECT LIMIT 'v...
  • 语法格式 123456789 CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [ { column_name type_name POSITION(offset,length) | LIKE source_table } [, ...] ] ) SERVER gsmpp_server OPTIONS ( { option_name ' value ' } [, ...] ) [ { WRITE ONLY | READ ONLY }] [ WITH error_table_name | LOG INTO error_table_name] [REMOTE LOG 'name'] [PER NODE REJECT LIMIT 'value'] [ TO { GROUP groupname | NODE ( nodename [, ... ] ) } ];
  • 示例 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 --定义函数为SQL查询。postgres=# CREATE FUNCTION func_add_sql(integer, integer) RETURNS integer AS 'select $1 + $2;' LANGUAGE SQL IMMUTABLE RETURNS NULL ON NULL INPUT;--利用参数名用 PL/pgSQL 自增一个整数。postgres=# CREATE OR REPLACE FUNCTION func_increment_plsql(i integer) RETURNS integer AS $$ BEGIN RETURN i + 1; END;$$ LANGUAGE plpgsql;--返回RECORD类型CREATE OR REPLACE FUNCTION compute(i int, out result_1 bigint, out result_2 bigint)returns SETOF RECORDas $$begin result_1 = i + 1; result_2 = i * 10;return next;end;$$language plpgsql;--返回一个包含多个输出参数的记录。postgres=# CREATE FUNCTION func_dup_sql(in int, out f1 int, out f2 text) AS $$ SELECT $1, CAST($1 AS text) || ' is text' $$ LANGUAGE SQL;postgres=# SELECT * FROM func_dup_sql(42);--计算两个整数的和,并返回结果。若果输入为null,则返回null。postgres=# CREATE FUNCTION func_add_sql2(num1 integer, num2 integer) RETURN integerASBEGIN RETURN num1 + num2;END;/--创建package属性的重载函数postgres=# create or replace function package_func_overload(col int, col2 int)return integer packageasdeclare col_type text;begin col := 122; dbe_output.print_line('two int parameters ' || col2); return 0;end;/postgres=# create or replace function package_func_overload(col int, col2 smallint)return integer packageasdeclare col_type text;begin col := 122; dbe_output.print_line('two smallint parameters ' || col2); return 0;end;/--修改函数add的执行规则为IMMUTABLE,即参数不变时返回相同结果。postgres=# ALTER FUNCTION func_add_sql2(INTEGER, INTEGER) IMMUTABLE;--将函数add的名称修改为add_two_number。postgres=# ALTER FUNCTION func_add_sql2(INTEGER, INTEGER) RENAME TO add_two_number;--将函数add的属者改为omm。postgres=# ALTER FUNCTION add_two_number(INTEGER, INTEGER) OWNER TO omm;--删除函数。postgres=# DROP FUNCTION add_two_number;postgres=# DROP FUNCTION func_increment_sql;postgres=# DROP FUNCTION func_dup_sql;postgres=# DROP FUNCTION func_increment_plsql;postgres=# DROP FUNCTION func_add_sql;
  • 参数说明 function_name 要创建的函数名称(可以用模式修饰)。 取值范围:字符串,要符合标识符的命名规范。 argname 函数参数的名称。 取值范围:字符串,要符合标识符的命名规范。 argmode 函数参数的模式。 取值范围:IN,OUT,INOUT或VARIADIC。缺省值是IN。只有OUT模式的参数后面能跟VARIADIC。并且OUT和INOUT模式的参数不能用在RETURNS TABLE的函数定义中。 VARIADIC用于声明数组类型的参数。 argtype 函数参数的类型。 expression 参数的默认表达式。 rettype 函数返回值的数据类型。 如果存在OUT或IN OUT参数,可以省略RETURNS子句。如果存在,该子句必须和输出参数所表示的结果类型一致:如果有多个输出参数,则为RECORD,否则与单个输出参数的类型相同。 SETOF修饰词表示该函数将返回一个集合,而不是单独一项。 column_name 字段名称。 column_type 字段类型。 definition 一个定义函数的字符串常量,含义取决于语言。它可以是一个内部函数名称、一个指向某个目标文件的路径、一个SQL查询、一个过程语言文本。 LANGUAGE lang_name 用以实现函数的语言的名称。可以是SQL,C,internal,或者是用户定义的过程语言名称。为了保证向下兼容,该名称可以用单引号(包围)。若采用单引号,则引号内必须为大写。 WINDOW 表示该函数是窗口函数,通常只用于C语言编写的函数。替换函数定义时不能改变WINDOW属性。 自定义窗口函数只支持LANGUAGE是internal,并且引用的内部函数必须是窗口函数。 IMMUTABLE 表示该函数在给出同样的参数值时总是返回同样的结果。 STABLE 表示该函数不能修改数据库,对相同参数值,在同一次表扫描里,该函数的返回值不变,但是返回值可能在不同SQL语句之间变化。 VOLATILE 表示该函数值可以在一次表扫描内改变,因此不会做任何优化。 SHIPPABLE NOT SHIPPABLE 表示该函数是否可以下推到DN上执行。 对于IMMUTABLE类型的函数,函数始终可以下推到DN上执行。 对于STABLE/VOLATILE类型的函数,仅当函数的属性是SHIPPABLE的时候,函数可以下推到DN执行。 对于指定了SHIPPABLE/IMMUABLE的函数或者存储过程,其不能包含EXCEPTION或调用含有EXCEPTION的函数或者存储过程。 PACKAGE 表示该函数是否支持重载。 不允许package函数和非package函数重载或者替换。 package函数不支持VARIADIC类型的参数。 不允许修改函数的package属性。 LEAKPROOF 指出该函数的参数只包括返回值。LEAKPROOF只能由系统管理员设置。 CALLED ON NULL INPUT 表明该函数的某些参数是NULL的时候可以按照正常的方式调用。该参数可以省略。 RETURNS NULL ON NULL INPUT STRICT STRICT用于指定如果函数的某个参数是NULL,此函数总是返回NULL。如果声明了这个参数,当有NULL值参数时该函数不会被执行;而只是自动返回一个NULL结果。 RETURNS NULL ON NULL INPUT和STRICT的功能相同。 EXTERNAL 目的是和SQL兼容,是可选的,这个特性适合于所有函数,而不仅是外部函数。 SECURITY INVOKER AUTHID CURRENT_USER 表明该函数将带着调用它的用户的权限执行。该参数可以省略。 SECURITY INVOKER和AUTHID CURRENT_USER的功能相同。 SECURITY DEFINER AUTHID DEFINER 声明该函数将以创建它的用户的权限执行。 AUTHID DEFINER和SECURITY DEFINER的功能相同。 FENCED NOT FENCED 该参数用于声明函数是在保护模式还是非保护模式下执行。如果函数声明为NOT FENCED模式,则函数的执行在CN或者DN进程中进行。如果函数声明为FENCED模式,则函数在新fork的进程执行,这样函数的异常不会影响CN或者DN进程。 FENCED/NOT FENCED模式的选择: 正在开发或者调试的Function使用FENCED模式。开发测试完成,使用NOT FENCED模式执行,减少fork进程以及通信的开销。 复杂的操作系统操作,例:打开文件,信号处理,线程处理等操作,使用FENCED模式。否则可能影响GaussDB数据库的执行。 用户自定义C函数,如果不指定该参数,默认为FENCED。 用户自定义PL/Java函数,如果不指定该参数,默认为FENCED, 且不支持指定为NOT FENCED执行模式。 用户自定义PL/pgSQL函数,如果不指定该参数,默认为NOT FENCED,且不支持指定为FENCED执行模式。 COST execution_cost 用来估计函数的执行成本。 execution_cost以cpu_operator_cost为单位。 取值范围:正数 ROWS result_rows 估计函数返回的行数。用于函数返回的是一个集合。 取值范围:正数,默认值是1000行。 configuration_parameter value 把指定的数据库会话参数值设置为给定的值。如果value是DEFAULT或者RESET,则在新的会话中使用系统的缺省设置。OFF关闭设置。 取值范围:字符串 DEFAULT OFF RESET 指定默认值。 from current 取当前会话中的值设置为configuration_parameter的值。 obj_file, link_symbol 适用于C语言函数,字符串obj_file指定了动态库的绝对路径;link_symbol指定了该函数的链接符号,也就是该函数在C代码中的函数名称。 plsql_body PL/SQL存储过程体。 当在函数体中创建用户时,日志中会记录密码的明文。因此不建议用户在函数体中创建用户。
  • 注意事项 如果创建函数时参数或返回值带有精度,不进行精度检测。 创建函数时,函数定义中对表对象的操作建议都显式指定模式,否则可能会导致函数执行异常。 在创建函数时,函数内部通过SET语句设置current_schema和search_path无效。执行完函数search_path和current_schema与执行函数前的search_path和current_schema保持一致。 如果函数参数中带有出参,SELECT调用函数必须缺省出参,CALL调用函数必须指定出参,对于调用重载的带有PACKAGE属性的函数,CALL调用函数可以缺省出参,具体信息参见CALL的示例。 兼容Postgresql风格的函数或者带有PACKAGE属性的函数支持重载。在指定REPLACE的时候,如果参数个数、类型、返回值有变化,不会替换原有函数,而是会建立新的函数。 SELECT调用可以指定不同参数来进行同名函数调用。语法CALL不支持调用不带有PACKAGE属性的同名函数。 在创建function时,不能在avg函数外面嵌套其他agg函数,或者其他系统函数。 在非逻辑集群模式下,暂不支持将返回值、参数以及变量设置为建在非系统默认安装Node Group的表,sql function内部语句暂不支持对建在非系统默认安装Node Group的表操作。 在逻辑集群模式下,如果函数返回值和参数是用户表类型,所有涉及表都必须在同一逻辑集群内;如果函数体内部涉及对多个逻辑集群表操作,函数定义时不能为IMMUTABLE和SHIPPABLE类型,以避免函数被下推到DN执行。 在逻辑集群模式下,函数参数、返回值不能用%type引用表字段类型,否则会导致函数创建失败。 新创建的函数默认会给PUBLIC授予执行权限(详见GRANT)。用户可以选择收回PUBLIC默认执行权限,然后根据需要将执行权限授予其他用户,为了避免出现新函数能被所有人访问的时间窗口,应在一个事务中创建函数并且设置函数执行权限。 函数定义时如果指定为IMMUTABLE和SHIPPABLE类型,应该尽量避免函数中存在INSERT,UPDATE,DELETE,MERGE和DDL操作,因为上述操作应该由CN判断对应的执行节点,否则执行结果可能产生错误。 在函数内部调用其它无参数的函数时,可以省略括号,直接使用函数名进行调用。
  • 语法格式 兼容PostgreSQL风格的创建自定义函数语法。 1 2 3 4 5 6 7 8 910111213141516171819202122 CREATE [ OR REPLACE ] FUNCTION function_name ( [ { argname [ argmode ] argtype [ { DEFAULT | := | = } expression ]} [, ...] ] ) [ RETURNS rettype [ DETERMINISTIC ] | RETURNS TABLE ( { column_name column_type } [, ...] )] LANGUAGE lang_name [ {IMMUTABLE | STABLE | VOLATILE } | {SHIPPABLE | NOT SHIPPABLE} | WINDOW | [ NOT ] LEAKPROOF | {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT } | {[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER | AUTHID DEFINER | AUTHID CURRENT_USER} | {fenced | not fenced} | {PACKAGE} | COST execution_cost | ROWS result_rows | SET configuration_parameter { {TO | =} value | FROM CURRENT }} ][...] { AS 'definition' | AS 'obj_file', 'link_symbol' } 兼容Oracle风格的创建自定义函数的语法。 1 2 3 4 5 6 7 8 91011121314151617181920212223 CREATE [ OR REPLACE ] FUNCTION function_name ( [ { argname [ argmode ] argtype [ { DEFAULT | := | = } expression ] } [, ...] ] ) RETURN rettype [ DETERMINISTIC ] [ {IMMUTABLE | STABLE | VOLATILE } | {SHIPPABLE | NOT SHIPPABLE} | {PACKAGE} | {FENCED | NOT FENCED} | [ NOT ] LEAKPROOF | {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT } | {[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER |AUTHID DEFINER | AUTHID CURRENT_USER} | COST execution_cost | ROWS result_rows | SET configuration_parameter { {TO | =} value | FROM CURRENT ][...] { IS | AS} plsql_body/
  • 参数说明 groupname 节点组名称。 取值范围:字符串,要符合标识符的命名规范。且最大长度不超过63个字符。 节点组命名支持ASCII字符集上所有字符,但是建议用户按照标识符命名规范命名。 nodename 节点名称。 取值范围:字符串,要符合标识符的命名规范。且最大长度不超过63个字符。 BUCKETS [ ( bucketnumber [, ... ] ) ] BUCKETS子句是集群管理工具的内部用法,该子句不建议用户直接使用,以免对集群的正常使用造成影响。 VCGROUP 创建一个逻辑集群类型的节点组。 DISTRIBUTE FROM src_group_name 创建一个逻辑集群节点组,用于从src_group_name指定的逻辑集群节点组重分布数据。该子句不建议用户直接使用,以免导致数据分布错误和逻辑集群不可用。
  • 参数说明 nodename 节点名称。 取值范围:字符串,要符合标识符的命名规范。 TYPE = nodetype 指定节点的类型。 取值范围: 'coordinator' 'datanode' HOST = hostname 指定节点对应的主机名称或者IP地址。 PORT = portnum 指定节点绑定的主机端口号。 HOST1 = hostname 指定节点对应的备机名称或者IP地址。 PORT1 = portnum 指定节点绑定的备机端口号。 HOSTPRIMARY PRIMARY = boolean 声明该节点是否为主节点。主节点允许做读写操作,否则只允许读操作。 取值范围: true false(默认值) PREFERRED = boolean 声明该节点是否为读操作的首选节点。 取值范围: true false(默认值) SCTP_PORT = portnum 主机TCP代理通信库或SCTP通信库使用的数据传输通道侦听端口,使用TCP或SCTP协议侦听连接。
  • 语法格式 1 2 3 4 5 6 7 8 9101112131415 CREATE NODE nodename WITH ( [ TYPE = nodetype,] [ HOST = hostname,] [ PORT = portnum,] [ HOST1 = 'hostname',] [ PORT1 = portnum,] [ HOSTPRIMARY [ = boolean ],] [ PRIMARY [ = boolean ],] [ PREFERRED [ = boolean ],] [ SCTP_PORT = portnum,] [ CONTROL_PORT = portnum,] [ SCTP_PORT1 = portnum,] [ CONTROL_PORT1 = portnum ] );
  • 语法格式 1 CREATE MASKING POLICY policy_name masking_clause[, ...]* policy_filter [ENABLE | DISABLE]; masking_clause: 1 masking_function ON LABEL(label_name[, ...]*) masking_function: maskall | randommasking | creditcardmasking | basicemailmasking | fullemailmasking | shufflemasking | alldigitsmasking
  • 参数说明 policy_name 审计策略名称,需要唯一,不可重复。 取值范围:字符串,要符合标识符的命名规范。 label_name 资源标签名称。 masking_clause 指出使用何种脱敏函数来脱敏被label_name标签标记的数据库资源。 policy_filter 指出该脱敏策略对何种身份的用户生效,若为空表示对所用用户生效。 FILTER_TYPE 描述策略过滤的条件类型,包括IP | APP | ROLES。 filter_value 指具体过滤信息内容,例如具体的IP,具体的APP名称,具体的用户名。 ENABLE|DISABLE 可以打开或关闭脱敏策略。若不指定ENABLE|DISABLE,语句默认为ENABLE。
  • 示例 1 2 3 4 5 6 7 8 9101112131415161718 --创建dev_mask和bob_mask用户。postgres=# CREATE USER dev_mask PASSWORD 'dev@1234';postgres=# CREATE USER bob_mask PASSWORD 'bob@1234';--创建一个表tb_for_maskingpostgres=# CREATE TABLE tb_for_masking(col1 text, col2 text, col3 text);--创建资源标签标记敏感列col1postgres=# CREATE RESOURCE LABEL mask_lb1 ADD COLUMN(tb_for_masking.col1);--创建资源标签标记敏感列col2postgres=# CREATE RESOURCE LABEL mask_lb2 ADD COLUMN(tb_for_masking.col2);--对访问敏感列col1的操作创建脱敏策略postgres=# CREATE MASKING POLICY maskpol1 maskall ON LABEL(mask_lb1);--创建仅对用户dev_mask和bob_mask,客户端工具为psql和gsql,IP地址为'10.20.30.40', '127.0.0.0/24'场景下生效的脱敏策略。postgres=# CREATE MASKING POLICY maskpol2 randommasking ON LABEL(mask_lb2) FILTER ON ROLES(dev_mask, bob_mask), APP(psql, gsql), IP('10.20.30.40', '127.0.0.0/24');
  • 功能描述 CREATE INCREMENTAL MATERIALIZED VIEW会创建一个增量物化视图,并且后续可以使用REFRESH MATERIALIZED VIEW(全量刷新)和REFRESH INCREMENTAL MATERIALIZED VIEW(增量刷新)刷新物化视图的数据。 CREATE INCREMENTAL MATERIALIZED VIEW类似于CREATE TABLE AS,不过它会记住被用来初始化该视图的查询, 因此它可以在后续中进行数据刷新。一个物化视图有很多和表相同的属性,但是不支持临时物化视图。
  • 参数说明 mv_name 要创建的物化视图的名称(可以被模式限定)。 取值范围:字符串,要符合标识符的命名规范。 column_name 新物化视图中的一个列名。物化视图支持指定列,指定列需要和后面的查询语句结果的列数量保持一致;如果没有提供列名,会从查询的输出列名中获取列名。 取值范围:字符串,要符合标识符的命名规范。 TABLESPACE tablespace_name 指定新建物化视图所属表空间。如果没有声明,将使用默认表空间。 AS query 一个SELECT、TABLE 或者VALUES命令。这个查询将在一个安全受限的操作中运行。
  • 示例 --创建一个普通表postgres=# CREATE TABLE my_table (c1 int, c2 int);--创建增量物化视图postgres=# CREATE INCREMENTAL MATERIALIZED VIEW my_imv AS SELECT * FROM my_table;--基表写入数据postgres=# INSERT INTO my_table VALUES(1,1),(2,2);--对增量物化视图my_imv进行增量刷新postgres=# REFRESH INCREMENTAL MATERIALIZED VIEW my_imv;
  • 参数说明 mv_name 要创建的物化视图的名称(可以被模式限定)。 取值范围:字符串,要符合标识符的命名规范。 column_name 新物化视图中的一个列名。物化视图支持指定列,指定列需要和后面的查询语句结果的列数量保持一致;如果没有提供列名,会从查询的输出列名中获取列名。 取值范围:字符串,要符合标识符的命名规范。 WITH ( storage_parameter [= value] [, ... ] ) 这个子句为表或索引指定一个可选的存储参数。详见CREATE TABLE。 TABLESPACE tablespace_name 指定新建物化视图所属表空间。如果没有声明,将使用默认表空间。 AS query 一个SELECT、TABLE 或者VALUES命令。这个查询将在一个安全受限的操作中运行。
  • 示例 --创建一个普通表postgres=# CREATE TABLE my_table (c1 int, c2 int);--创建全量物化视图postgres=# CREATE MATERIALIZED VIEW my_mv AS SELECT * FROM my_table;--基表写入数据postgres=# INSERT INTO my_table VALUES(1,1),(2,2);--对全量物化视图my_mv进行全量刷新postgres=# REFRESH MATERIALIZED VIEW my_mv;
  • 语法格式 123456789 CREATE DATABASE database_name [ [ WITH ] { [ OWNER [=] user_name ] | [ TEMPLATE [=] template ] | [ ENCODING [=] encoding ] | [ LC_COLLATE [=] lc_collate ] | [ LC_CTYPE [=] lc_ctype ] | [ DBCOMPATIBILITY [=] compatibilty_type ] | [ TABLESPACE [=] tablespace_name ] | [ CONNECTION LIMIT [=] connlimit ]}[...] ];
  • 示例 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637383940 --创建jim和tom用户。postgres=# CREATE USER jim PASSWORD 'xxxxxxxxxx';postgres=# CREATE USER tom PASSWORD 'xxxxxxxxxx';--创建一个GBK编码的数据库music(本地环境的编码格式必须也为GBK)。postgres=# CREATE DATABASE music ENCODING 'GBK' template = template0;--创建数据库music2,并指定所有者为jim。postgres=# CREATE DATABASE music2 OWNER jim;--用模板template0创建数据库music3,并指定所有者为jim。postgres=# CREATE DATABASE music3 OWNER jim TEMPLATE template0;--设置music数据库的连接数为10。postgres=# ALTER DATABASE music CONNECTION LIMIT= 10;--将music名称改为music4。postgres=# ALTER DATABASE music RENAME TO music4;--将数据库music2的所属者改为tom。postgres=# ALTER DATABASE music2 OWNER TO tom;--删除数据库。postgres=# DROP DATABASE music2;postgres=# DROP DATABASE music3;postgres=# DROP DATABASE music4;--删除jim和tom用户。postgres=# DROP USER jim;postgres=# DROP USER tom;--创建兼容TD格式的数据库。postgres=# CREATE DATABASE td_compatible_db DBCOMPATIBILITY 'TD';--创建兼容ORA格式的数据库。postgres=# CREATE DATABASE ora_compatible_db DBCOMPATIBILITY 'ORA';--删除兼容TD、ORA格式的数据库。postgres=# DROP DATABASE td_compatible_db;postgres=# DROP DATABASE ora_compatible_db;
  • 语法格式 12 CREATE GROUP group_name [ [ WITH ] option [ ... ] ] [ ENCRYPTED | UNENCRYPTED ] { PASSWORD | IDENTIFIED BY } { 'password' [ EXPIRED ] | DISABLE }; 其中可选项action子句语法为: 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132 where option can be:{SYSADMIN | NOSYSADMIN} | {MONADMIN | NOMONADMIN} | {OPRADMIN | NOOPRADMIN} | {POLADMIN | NOPOLADMIN} | {AUDITADMIN | NOAUDITADMIN} | {CREATEDB | NOCREATEDB} | {USEFT | NOUSEFT} | {CREATEROLE | NOCREATEROLE} | {INHERIT | NOINHERIT} | {LOGIN | NOLOGIN} | {REPLICATION | NOREPLICATION} | {INDEPENDENT | NOINDEPENDENT} | {VCADMIN | NOVCADMIN} | {PERSISTENCE | NOPERSISTENCE} | CONNECTION LIMIT connlimit | VALID BEGIN 'timestamp' | VALID UNTIL 'timestamp' | RESOURCE POOL 'respool' | USER GROUP 'groupuser' | PERM SPACE 'spacelimit' | NODE GROUP logic_group_name | IN ROLE role_name [, ...] | IN GROUP role_name [, ...] | ROLE role_name [, ...] | ADMIN role_name [, ...] | USER role_name [, ...] | SYSID uid | DEFAULT TABLESPACE tablespace_name | PROFILE DEFAULT | PROFILE profile_name | PGUSER
  • 示例 1 2 3 4 5 6 7 8 91011121314151617 --创建一个空的Data Source对象,不含任何信息。postgres=# CREATE DATA SOURCE ds_test1;--创建一个Data Source对象,含TYPE信息,VERSION为NULL。postgres=# CREATE DATA SOURCE ds_test2 TYPE 'MPPDB' VERSION NULL;--创建一个Data Source对象,仅含OPTIONS。postgres=# CREATE DATA SOURCE ds_test3 OPTIONS (dsn 'GaussDB', encoding 'utf8');--创建一个Data Source对象,含TYPE, VERSION, OPTIONS。postgres=# CREATE DATA SOURCE ds_test4 TYPE 'unknown' VERSION '11.2.3' OPTIONS (dsn 'GaussDB', username 'userid', password 'pwd@123456', encoding '');--删除Data Source对象。postgres=# DROP DATA SOURCE ds_test1;postgres=# DROP DATA SOURCE ds_test2;postgres=# DROP DATA SOURCE ds_test3;postgres=# DROP DATA SOURCE ds_test4;
  • 参数说明 src_name 新建Data Source对象的名称,需在数据库内部唯一。 取值范围:字符串,要符标识符的命名规范。 TYPE 新建Data Source对象的类型,可缺省。 取值范围:空串或非空字符串。 VERSION 新建Data Source对象的版本号,可缺省或NULL值。 取值范围:空串或非空字符串或NULL。 OPTIONS Data Source对象的选项字段,创建时可省略,如若指定,其关键字如下: optname 选项名称。 取值范围:dsn, username, password, encoding。不区分大小写。 dsn对应odbc配置文件中的DSN。 username/password对应连接目标库的用户名和密码。 GaussDB在后台会对用户输入的username/password加密以保证安全性。 encoding表示与目标库交互的字符串编码方式(含发送的SQL语句和返回的字符类型数据),此处创建对象时不检查encoding取值的合法性,能否正确编解码取决于用户提供的编码方式是否在数据库本身支持的字符编码范围内。 optvalue 选项值。 取值范围:空或者非空字符串。
  • 注意事项 默认只允许初始化用户创建,如果开启enable_access_server_directory(可参考enable_access_server_directory),sysadmin权限的用户也可以创建目录。 创建用户默认拥有此路径的READ和WRITE操作权限。 目录的默认owner为创建directory的用户。 以下路径禁止创建: 路径含特殊字符。 路径是相对路径。 路径是符号连接。 创建目录时会进行以下合法性校验: 创建时会检查添加路径是否为操作系统实际存在路径,如不存在会提示用户使用风险。 创建时会校验数据库初始化(omm)用户对于添加路径的权限(即操作系统目录权限,读/写/执行 - R/W/X),如果权限不全,会提示用户使用风险。 在集群环境下用户指定的路径需要用户保证各节点上路径的一致性,否则在不同节点上执行会产生找不到路径的问题。
共100000条