华为云用户手册

  • 语法格式 CREATE CAST (source_type AS target_type) WITH FUNCTION function_name (argument_type [, ...]) [ AS ASSIGNMENT | AS IMPLICIT ]CREATE CAST (source_type AS target_type) WITHOUT FUNCTION [ AS ASSIGNMENT | AS IMPLICIT ]CREATE CAST (source_type AS target_type) WITH INOUT [ AS ASSIGNMENT | AS IMPLICIT ]
  • 定义分区表 分区表是一种逻辑表,数据是由普通表存储的,主要用于提升查询性能。所涉及的SQL语句,请参考表5。 表5 分区表定义相关SQL 功能 相关SQL 创建分区表 CREATE TABLE PARTITION 创建分区 ALTER TABLE PARTITION 修改分区表属性 ALTER TABLE PARTITION 删除分区 ALTER TABLE PARTITION 删除分区表 DROP TABLE
  • 语法格式 修改物化视图的所属用户。 ALTER MATERIALIZED VIEW [ IF EXISTS ] mv_name OWNER TO new_owner; 修改物化视图的列。 ALTER MATERIALIZED VIEW [ IF EXISTS ] mv_name RENAME [ COLUMN ] column_name TO new_column_name; 重命名物化视图。 ALTER MATERIALIZED VIEW [ IF EXISTS ] mv_name RENAME TO new_name;
  • 示例 --创建表。openGauss=# CREATE TABLE my_table (c1 int, c2 int) WITH(STORAGE_TYPE=ASTORE);--创建全量物化视图。openGauss=# CREATE MATERIALIZED VIEW foo AS SELECT * FROM my_table;--把物化视图foo重命名为bar。openGauss=# ALTER MATERIALIZED VIEW foo RENAME TO bar;--删除全量物化视图。openGauss=# DROP MATERIALIZED VIEW bar;--删除表my_table。openGauss=# DROP TABLE my_table;
  • 背景信息 在SQL语言中,每个数据都与一个决定其行为和用法的数据类型相关。 GaussDB 提供一个可扩展的数据类型系统,该系统比其它SQL实现更具通用性和灵活性。因而,GaussDB中大多数类型转换是由通用规则来管理的,这种做法允许使用混合类型的表达式。 GaussDB扫描/分析器只将词法元素分解成五个基本种类:整数、浮点数、字符串、标识符和关键字。大多数非数字类型首先表现为字符串。SQL语言的定义允许将常量字符串声明为具体的类型。例,下面查询: 12345 openGauss=# SELECT text 'Origin' AS "label", point '(0,0)' AS "value"; label | value--------+------- Origin | (0,0)(1 row) 示例中有两个文本常量,类型分别为text和point。如果没有为字符串文本声明类型,则该文本首先被定义成一个unknown类型。 在GaussDB分析器里,有四种基本的SQL结构需要独立的类型转换规则: 函数调用 多数SQL类型系统是建筑在一套丰富的函数上的。函数调用可以有一个或多个参数。因为SQL允许函数重载,所以不能通过函数名直接找到要调用的函数,分析器必须根据函数提供的参数类型选择正确的函数。 操作符 SQL允许在表达式上使用前缀或后缀(单目)操作符,也允许表达式内部使用双目操作符(两个参数)。像函数一样,操作符也可以被重载,因此操作符的选择也和函数一样取决于参数类型。 值存储 INSERT和UPDATE语句将表达式结果存入表中。语句中的表达式类型必须和目标字段的类型一致或者可以转换为一致。 UNION,CASE和相关构造 因为联合SELECT语句中的所有查询结果必须在一列里显示出来,所以每个SELECT子句中的元素类型必须相互匹配并转换成一个统一类型。类似地,一个CASE构造的结果表达式必须转换成统一的类型,这样整个case表达式会有一个统一的输出类型。同样的要求也存在于ARRAY构造以及GREATEST和LEAST函数中。 系统表pg_cast存储了有关数据类型之间的转换关系以及如何执行这些转换的信息。详细信息请参见PG_CAST。 语义分析阶段会决定表达式的返回值类型并选择适当的转换行为。数据类型的基本类型分类,包括:Boolean,numeric,string,bitstring,datetime,timespan,geometric和network。每种类型都有一种或多种首选类型用于解决类型选择的问题。根据首选类型和可用的隐含转换,就可能保证有歧义的表达式(那些有多个候选解析方案的)得到有效的方式解决。 所有类型转换规则都是建立在下面几个基本原则上的: 隐含转换绝不能有奇怪的或不可预见的输出。 如果一个查询不需要隐含的类型转换,分析器和执行器不应该进行更多的额外操作。这就是说,任何一个类型匹配、格式清晰的查询不应该在分析器里耗费更多的时间,也不应该向查询中引入任何不必要的隐含类型转换调用。 另外,如果一个查询在调用某个函数时需要进行隐式转换,当用户定义了一个有正确参数的函数后,解释器应该选择使用新函数。
  • 语法格式 CREATE GROUP group_name [ [ WITH ] option [ ... ] ] [ ENCRYPTED | UNENCRYPTED ] { PASSWORD | IDENTIFIED BY } { 'password' [ EXPIRED ] | DISABLE }; 其中可选项option子句语法为: {SYSADMIN | NOSYSADMIN} | {MONADMIN | NOMONADMIN} | {OPRADMIN | NOOPRADMIN} | {POLADMIN | NOPOLADMIN} | {AUDITADMIN | NOAUDITADMIN} | {CREATEDB | NOCREATEDB} | {USEFT | NOUSEFT} | {CREATEROLE | NOCREATEROLE} | {INHERIT | NOINHERIT} | { LOG IN | NOLOGIN} | {REPLICATION | NOREPLICATION} | {VCADMIN | NOVCADMIN} | {PERSISTENCE | NOPERSISTENCE} | CONNECTION LIMIT connlimit | VALID BEGIN 'timestamp' | VALID UNTIL 'timestamp' | PERM SPACE 'spacelimit' | TEMP SPACE 'tmpspacelimit' | SPILL SPACE 'spillspacelimit' | IN ROLE role_name [, ...] | IN GROUP role_name [, ...] | ROLE role_name [, ...] | ADMIN rol e_name [, ...] | USER role_name [, ...] | SYSID uid | DEFAULT TABLESPACE tablespace_name | PROFILE DEFAULT | PROFILE profile_name | PGUSER
  • 语法格式 修改用户的权限等信息。 ALTER USER user_name [ [ WITH ] option [ ... ] ]; 其中option子句为。 { CREATEDB | NOCREATEDB } | { CREATEROLE | NOCREATEROLE } | { INHERIT | NOINHERIT } | { AUDITADMIN | NOAUDITADMIN } | { SYSADMIN | NOSYSADMIN } | {MONADMIN | NOMONADMIN} | {OPRADMIN | NOOPRADMIN} | {POLADMIN | NOPOLADMIN} | { USEFT | NOUSEFT } | { LOGIN | NOLOGIN } | { REPLICATION | NOREPLICATION } | {VCADMIN | NOVCADMIN} | {PERSISTENCE | NOPERSISTENCE} | CONNECTION LIMIT connlimit | [ ENCRYPTED | UNENCRYPTED ] PASSWORD { 'password' [EXPIRED] | DISABLE | EXPIRED } | [ ENCRYPTED | UNENCRYPTED ] IDENTIFIED BY { 'password' [ REPLACE 'old_password' | EXPIRED ] | DISABLE } | VALID BEGIN 'timestamp' | VALID UNTIL 'timestamp' | PERM SPACE 'spacelimit' | PGUSER 修改用户名。 ALTER USER user_name RENAME TO new_name; 锁定或解锁。 ALTER USER user_name ACCOUNT { LOCK | UNLOCK }; 修改与用户关联的指定会话参数值。 ALTER USER user_name SET configuration_parameter { { TO | = } { value | DEFAULT } | FROM CURRENT }; 重置与用户关联的指定会话参数值。 ALTER USER user_name RESET { configuration_parameter | ALL };
  • 注意事项 如果创建函数时参数或返回值带有精度,不进行精度检测。 创建函数时,函数定义中对表对象的操作建议都显式指定模式,否则可能会导致函数执行异常。 在创建函数时,函数内部通过SET语句设置current_schema和search_path无效。执行完函数后的search_path和current_schema与执行函数前的search_path和current_schema保持一致。 如果函数参数中带有出参,SELECT调用函数必须缺省出参,CALL调用函数必须指定出参,对于调用重载的带有PACKAGE属性的函数,CALL调用函数可以缺省出参,具体信息参见CALL的示例。 兼容PostgreSQL风格的函数或者带有PACKAGE属性的函数支持重载。在指定REPLACE的时候,如果参数个数、类型、返回值有变化,不会替换原有函数,而是会建立新的函数。 SELECT调用可以指定不同参数来进行同名函数调用。由于语法不支持调用不带有PACKAGE属性的同名函数。 在创建function时,不能在avg函数外面嵌套其他agg函数,或者其他系统函数。 新创建的函数默认会给PUBLIC授予执行权限(详见GRANT)。用户默认继承PUBLIC角色权限,因此其他用户也会有函数的执行权限并可以查看函数的定义,另外执行函数时还需要具备函数所在schema的USAGE权限。用户在创建函数时可以选择收回PUBLIC默认执行权限,然后根据需要将执行权限授予其他用户,为了避免出现新函数能被所有人访问的时间窗口,应在一个事务中创建函数并且设置函数执行权限。开启数据库对象隔离属性后,普通用户只能查看有权限执行的函数定义。 在函数内部调用其它无参数的函数时,可以省略括号,直接使用函数名进行调用。 在函数内部调用其他有出参的函数,如果在赋值表达式中调用时,被调函数的出参可以省略,给出了也会被忽略。 兼容A数据库风格的函数支持参数注释的查看与导出、导入。 兼容A数据库风格的函数支持介于IS/AS与plsql_body之间的注释的查看与导出、导入。 被授予CREATE ANY FUNCTION权限的用户,可以在用户模式下创建/替换函数。 函数默认为SECURITY INVOKER权限,如果想将默认行为改为SECURITY DEFINER权限,需要设置guc参数behavior_compat_options='plsql_security_definer'。 对于plpgsql函数,打开参数behavior_compat_options='proc_outparam_override'后,out/inout的行为会改变,函数中同时返回return和out/inout,而参数打开前仅返回return,见示例。 不支持形参仅在自定义ref cursor类型和sys_refcursor类型不同的重载。 重载的函数在调用时变量需要明确具体的类型。 带OUT模式参数的函数不支持嵌套调用,比如 b := func(a,func(c,1));,建议改为 tmp := func(c,1); b := func(a,tmp);。 对于plpgsql函数,打开参数behavior_compat_options='proc_outparam_override'后,有以下限制: 如果同一schema和package中已存在带有out/inout参数函数,不能再次创建带有out/inout参数的同名函数。 无论使用select还是call调用存储过程,都必须加上out参数。 部分场景不支持函数参与表达式(与参数打开前相比),如存储过程中左赋值,call function等,见示例。 不支持调用无return的函数,perform function调用。 存储过程中调用函数,不支持out/inout参数传入常量,见示例。 如果将定义者权限的函数创建到其他用户SCHEMA下,则会以其他用户的权限执行该函数,有越权风险,请谨慎使用。
  • 参数说明 function_name 要创建的函数名称(可以用模式修饰)。 取值范围:字符串,要符合标识符命名规范。且最多为63个字符。若超过63个字符,数据库会截断并保留前63个字符当做函数名称。 argname 函数参数的名称。 取值范围:字符串,要符合标识符命名规范。且最多为63个字符。若超过63个字符,数据库会截断并保留前63个字符当做函数参数名称。 argmode 函数参数的模式。 取值范围:IN,OUT,INOUT或VARIADIC。缺省值是IN。只有OUT模式的参数后面能跟VARIADIC。并且OUT和INOUT模式的参数不能用在RETURNS TABLE的函数定义中。 VARIADIC用于声明数组类型的参数。 argtype 函数参数的类型。可以使用%TYPE或%ROWTYPE间接引用变量或表的类型,详细可参考存储过程章节定义变量。 expression 参数的默认表达式。 推荐使用方式:将所有默认值参数定义在所有非默认值参数后。 rettype 函数返回值的数据类型。与argtype相同,同样可以使用%TYPE或%ROWTYPE间接引用类型。 如果存在OUT或INOUT参数,可以省略RETURNS子句。如果存在,该子句必须和输出参数所表示的结果类型一致:如果有多个输出参数,则为RECORD,否则与单个输出参数的类型相同。 SETOF修饰词表示该函数将返回一个集合,而不是单独一项。 PACKAGE外FUNCTION argtype和rettype中%TYPE不支持引用PACKAGE变量的类型。 column_name 字段名称。 column_type 字段类型。 definition 一个定义函数的字符串常量,含义取决于语言。它可以是一个内部函数名称、一个指向某个目标文件的路径、一个SQL查询、一个过程语言文本。 DETERMINISTIC SQL语法兼容接口,未实现功能,不推荐使用。 LANGUAGE lang_name 用以实现函数的语言的名称。可以是SQL,internal,或者是用户定义的过程语言名称。为了保证向下兼容,该名称可以用单引号(包围)。若采用单引号,则引号内必须为大写。 由于兼容性问题,A数据库风格的语法无论指定任何语言,最终创建的语言都为plpgsql。 WINDOW 表示该函数是窗口函数。替换函数定义时不能改变WINDOW属性。 自定义窗口函数只支持LANGUAGE是internal,并且引用的内部函数必须是窗口函数。 IMMUTABLE 表示该函数在给出同样的参数值时总是返回同样的结果。 STABLE 表示该函数不能修改数据库,对相同参数值,在同一次表扫描里,该函数的返回值不变,但是返回值可能在不同SQL语句之间变化。 VOLATILE 表示该函数值可以在一次表扫描内改变,因此不会做任何优化。 SHIPPABLE|NOT SHIPPABLE 表示该函数是否可以下推执行。预留接口,不推荐使用。 FENCED|NOT FENCED 如果指定函数为fenced模式,则函数会在worker线程中被调用,防止C代码实现错误导致服务器crash,不建议使用not fenced模式。 PACKAGE 表示该函数是否支持重载。PostgreSQL风格的函数本身就支持重载,此参数主要是针对其它风格的函数。 不允许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的功能相同。 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的值。 plsql_body PL/SQL存储过程体。 当在函数体中进行创建用户、修改密码或加解密等涉及密码或密钥相关操作时,系统表及日志中会记录密码或密钥的明文信息。为防止敏感信息泄露,不建议用户在函数体中进行涉及密码或密钥等敏感信息的相关操作。
  • 语法格式 兼容PostgreSQL风格的创建自定义函数语法。 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' } A数据库风格的创建自定义函数的语法。 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 | LANGUAGE lang_name ][...] { IS | AS} plsql_body/
  • 示例 --创建jim和tom用户。openGauss=# CREATE USER jim PASSWORD '********';openGauss=# CREATE USER tom PASSWORD '********';--创建一个GBK编码的数据库music(本地环境的编码格式必须也为GBK)。openGauss=# CREATE DATABASE music ENCODING 'GBK' template = template0;--创建数据库music2,并指定所有者为jim。openGauss=# CREATE DATABASE music2 OWNER jim;--用模板template0创建数据库music3,并指定所有者为jim。openGauss=# CREATE DATABASE music3 OWNER jim TEMPLATE template0;--设置music数据库的连接数为10。openGauss=# ALTER DATABASE music CONNECTION LIMIT= 10;--将music名称改为music4。openGauss=# ALTER DATABASE music RENAME TO music4;--将数据库music2的所属者改为tom。openGauss=# ALTER DATABASE music2 OWNER TO tom;--设置music3的表空间为PG_DEFAULT。openGauss=# ALTER DATABASE music3 SET TABLESPACE PG_DEFAULT;--关闭在数据库music3上缺省的索引扫描。openGauss=# ALTER DATABASE music3 SET enable_indexscan TO off;--重置enable_indexscan参数。openGauss=# ALTER DATABASE music3 RESET enable_indexscan;--删除数据库。openGauss=# DROP DATABASE music2;openGauss=# DROP DATABASE music3;openGauss=# DROP DATABASE music4;--删除jim和tom用户。openGauss=# DROP USER jim;openGauss=# DROP USER tom;--创建兼容TD格式的数据库。openGauss=# CREATE DATABASE td_compatible_db DBCOMPATIBILITY 'C';--创建兼容A格式的数据库。openGauss=# CREATE DATABASE ora_compatible_db DBCOMPATIBILITY 'A';--删除兼容TD、A格式的数据库。openGauss=# DROP DATABASE td_compatible_db;openGauss=# DROP DATABASE ora_compatible_db;
  • 语法格式 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 ]}[...] ];
  • 参数说明 database_name 数据库名称。 取值范围:字符串,要符合标识符命名规范。 OWNER [ = ] user_name 数据库所有者。缺省时,新数据库的所有者是当前用户。 取值范围:已存在的用户名。 TEMPLATE [ = ] template 模板名。即从哪个模板创建新数据库。GaussDB采用从模板数据库复制的方式来创建新的数据库。初始时,GaussDB包含两个模板数据库template0、template1,以及一个默认的用户数据库postgres。 取值范围:仅template0。 ENCODING [ = ] 'encoding' 指定数据库使用的字符编码,可以是字符串(如'SQL_ASCII')、整数编号。 不指定时,默认使用模板数据库的编码。模板数据库template0和template1的编码默认与操作系统环境相关。template1不允许修改字符编码,因此若要变更编码,请使用template0创建数据库。 常用取值:GBK、UTF8、Latin1、GB18030等,具体支持的字符集如下。 表1 GaussDB字符集 名称 描述 语言 是否服务器端? ICU(International Components for Unicode)? 字节/字符 别名 BIG5 Big Five 繁体中文 否 否 1-2 WIN950, Windows950 EUC_CN 扩展UNIX编码-中国 简体中文 是 是 1-3 - EUC_JP 扩展UNIX编码-日本 日文 是 是 1-3 - EUC_JIS_2004 扩展UNIX编码-日本, JIS X 0213 日文 是 否 1-3 - EUC_KR 扩展UNIX编码-韩国 韩文 是 是 1-3 - EUC_TW 扩展UNIX编码-中国台湾 繁体中文 是 是 1-3 - GB18030 国家标准 中文 是 否 1-4 - GBK 扩展国家标准 简体中文 是 否 1-2 WIN936, Windows936 ISO_8859_5 ISO 8859-5, ECMA 113 拉丁语/西里尔语 是 是 1 - ISO_8859_6 ISO 8859-6, ECMA 114 拉丁语/阿拉伯语 是 是 1 - ISO_8859_7 ISO 8859-7, ECMA 118 拉丁语/希腊语 是 是 1 - ISO_8859_8 ISO 8859-8, ECMA 121 拉丁语/希伯来语 是 是 1 - JOHAB JOHAB 韩语 否 否 1-3 - KOI8R KOI8-R 西里尔语(俄语) 是 是 1 KOI8 KOI8U KOI8-U 西里尔语(乌克兰语) 是 是 1 - LATIN1 ISO 8859-1, ECMA 94 西欧 是 是 1 ISO88591 LATIN2 ISO 8859-2, ECMA 94 中欧 是 是 1 ISO88592 LATIN3 ISO 8859-3, ECMA 94 南欧 是 是 1 ISO88593 LATIN4 ISO 8859-4, ECMA 94 北欧 是 是 1 ISO88594 LATIN5 ISO 8859-9, ECMA 128 土耳其语 是 是 1 ISO88599 LATIN6 ISO 8859-10, ECMA 144 日耳曼语 是 是 1 ISO885910 LATIN7 ISO 8859-13 波罗的海 是 是 1 ISO885913 LATIN8 ISO 8859-14 凯尔特语 是 是 1 ISO885914 LATIN9 ISO 8859-15 带欧罗巴和口音的LATIN1 是 是 1 ISO885915 LATIN10 ISO 8859-16, ASRO SR 14111 罗马尼亚语 是 否 1 ISO885916 MULE_INTERNAL Mule内部编码 多语种编辑器 是 否 1-4 - SJIS Shift JIS 日语 否 否 1-2 Mskanji, ShiftJIS, WIN932, Windows932 SHIFT_JIS_2004 Shift JIS, JIS X 0213 日语 否 否 1-2 - SQL_ASCII 未指定(见文本) 任意 是 否 1 - UHC 统一韩语编码 韩语 否 否 1-2 WIN949, Windows949 UTF8 Unicode, 8-bit 所有 是 是 1-4 Unicode WIN866 Windows CP866 西里尔语 是 是 1 ALT WIN874 Windows CP874 泰语 是 否 1 - WIN1250 Windows CP1250 中欧 是 是 1 - WIN1251 Windows CP1251 西里尔语 是 是 1 WIN WIN1252 Windows CP1252 西欧 是 是 1 - WIN1253 Windows CP1253 希腊语 是 是 1 - WIN1254 Windows CP1254 土耳其语 是 是 1 - WIN1255 Windows CP1255 希伯来语 是 是 1 - WIN1256 Windows CP1256 阿拉伯语 是 是 1 - WIN1257 Windows CP1257 波罗的海 是 是 1 - WIN1258 Windows CP1258 越南语 是 是 1 ABC, TCVN, TCVN5712, VSCII 需要注意并非所有的客户端API都支持上面列出的字符集。 SQL_ASCII设置与其他设置表现存在差异。如果服务器字符集是SQL_ASCII,服务器把字节值0-127根据 ASCII标准解释,而字节值128-255则当作无法解析的字符。如果设置为SQL_ASCII,就不会有编码转换。因此,这个设置基本不是用来声明所使用的指定编码, 因为这个声明会忽略编码。在大多数情况下,如果使用了任何非ASCII数据,那么请不要再使用SQL_ASCII进行设置,因为数据库无法转换或者校验非ASCII字符。 指定新的数据库字符集编码必须与所选择的本地环境中(LC_COLLATE和LC_CTYPE)的设置兼容。 当指定的字符编码集为GBK时,部分中文生僻字无法直接作为对象名。这是因为GBK第二个字节的编码范围在0x40-0x7E之间时,字节编码与ASCII字符@A-Z[\]^_`a-z{|}重叠。其中@[\]^_'{|}是数据库中的操作符,直接作为对象名时,会语法报错。例如“侤”字,GBK16进制编码为0x8240,第二个字节为0x40,与ASCII“@”符号编码相同,因此无法直接作为对象名使用。如果确实要使用,可以在创建和访问对象时,通过增加双引号来规避这个问题。 若客户端编码为A,服务器端编码为B,则需要满足数据库中存在编码格式A与B的转换。数据库能够支持的所有的编码格式转换详见系统表PG_CONVERSION(若无法转换,则建议客户端编码与服务器端编码保持一致,客户端编码可通过GUC参数client_encoding修改)。 LC_COLLATE [ = ] 'lc_collate' 指定新数据库使用的字符集。例如,通过lc_collate = 'zh_CN.gbk'设定该参数。 该参数的使用会影响到对字符串的排序顺序(如使用ORDER BY执行,以及在文本列上使用索引的顺序)。默认是使用模板数据库的字符集。 取值范围:操作系统支持的字符集。 LC_CTYPE [ = ] 'lc_ctype' 指定新数据库使用的字符分类。例如,通过lc_ctype = 'zh_CN.gbk'设定该参数。该参数的使用会影响到字符的分类,如大写、小写和数字。默认是使用模板数据库的字符分类。 取值范围:操作系统支持的字符分类。 对于lc_collate和lc_ctype参数的取值范围,取决于本地环境支持的字符集。例如:在Linux操作系统上,可通过locale -a命令获取操作系统支持的字符集列表,在应用lc_collate和lc_ctype参数时可从中选择用户需要的字符集和字符分类。 DBCOMPATIBILITY [ = ] 'compatibility_type' 指定兼容的数据库的类型,默认兼容O。 取值范围:A、B、C、PG。分别表示兼容O、MY、TD和POSTGRES。 A兼容性下,数据库将空字符串作为NULL处理,数据类型DATE会被替换为TIMESTAMP(0) WITHOUT TIME ZONE。 将字符串转换成整数类型时,如果输入不合法,B兼容性会将输入转换为0,而其它兼容性则会报错。 PG兼容性下,CHAR和VARCHAR以字符为计数单位,其它兼容性以字节为计数单位。例如,对于UTF-8字符集,CHAR(3)在PG兼容性下能存放3个中文字符,而在其它兼容性下只能存放1个中文字符。 TABLESPACE [ = ] tablespace_name 指定数据库对应的表空间。 取值范围:已存在表空间名。 CONNECTION LIMIT [ = ] connlimit 数据库可以接受的并发连接数。 系统管理员不受此参数的限制。 connlimit数据库主节点单独统计,数据库整体的连接数 = connlimit * 当前正常数据库主节点个数。 取值范围:[-1, 2^31-1]的整数。默认值为-1,表示没有限制。 有关字符编码的一些限制: 若区域设置为C(或POSIX),则允许所有的编码类型,但是对于其他的区域设置,字符编码必须和区域设置相同。 若字符编码方式是SQL_ASCII,并且修改者为管理员用户时,则字符编码可以和区域设置不相同。 编码和区域设置必须匹配模板数据库,除了将template0当作模板。 因为其他数据库可能会包含不匹配指定编码的数据,或者可能包含排序顺序受LC_COLLATE和LC_CTYPE影响的索引。复制这些数据会导致在新数据库中的索引失效。template0是不包含任何会受到影响的数据或者索引。
  • 注意事项 每个对象只存储一条注释,因此要修改一个注释,对同一个对象发出一条新的COMMENT命令即可。要删除注释,在文本字符串的位置写上NULL即可。当删除对象时,注释自动被删除掉。 目前注释浏览没有安全机制:任何连接到某数据库上的用户都可以看到所有该数据库对象的注释。共享对象(比如数据库、角色、表空间)的注释是全局存储的,连接到任何数据库的任何用户都可以看到它们。因此,不要在注释里存放与安全有关的敏感信息。 对大多数对象,只有对象的所有者或者被授予了对象COMMENT权限的用户可以设置注释,系统管理员默认拥有该权限。 角色没有所有者,所以COMMENT ON ROLE命令仅可以由系统管理员对系统管理员角色执行,有CREATEROLE权限的角色也可以为非系统管理员角色设置注释。系统管理员可以对所有对象进行注释。
  • 参数说明 agg_name 聚集函数的名称。 agg_type 聚集函数参数的类型。 source_type 类型转换的源数据类型。 target_type 类型转换的目标数据类型。 object_name 对象名。 table_name.column_name view_name.column_name 列名称。前缀可加表名称或者视图名称。 constraint_name 表约束的名称。 table_name 表的名称。 function_name 函数名称。 argname,argmode,argtype 函数参数的名称、模式、类型。 large_object_oid 大对象的OID。 operator_name 操作符名称。 left_type,right_type 操作参数的数据类型(可以用模式修饰)。当前置或者后置操作符不存在时,可以增加NONE选项。 trigger_name 触发器名称。 text 注释。
  • 语法格式 COMMENT ON{ AGGREGATE agg_name (agg_type [, ...] ) | CAST (source_type AS target_type) | COLLATION object_name | COLUMN { table_name.column_name | view_name.column_name } | CONSTRAINT constraint_name ON table_name | CONVERSION object_name | DATABASE object_name | DOMAIN object_name | EXTENSION object_name | FOREIGN DATA WRAPPER object_name | FOREIGN TABLE object_name | FUNCTION function_name ( [ {[ argname ] [ argmode ] argtype} [, ...] ] ) | INDEX object_name | LARGE OBJECT large_object_oid | 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 | ROLE object_name | SCHEMA object_name | SERVER object_name | TABLE object_name | TABLESPACE object_name | TEXT SEARCH CONFIGURATION object_name | TEXT SEARCH DICTIONARY object_name | TEXT SEARCH PARSER object_name | TEXT SEARCH TEMPLATE object_name | TYPE object_name | VIEW object_name | TRIGGER trigger_name ON table_name} IS 'text';
  • 注意事项 为了在表上定义或修改规则,你必须是该表的拥有者。 如果在同一个表定义了多个相同类型的规则,则按规则的名称字母顺序触发它们。 在视图上用于INSERT、UPDATE、DELETE的规则中可以添加RETURNING子句基于视图的字段返回。如果规则被INSERT RETURNING、UPDATE RETURNING、DELETE RETURNING命令触发,这些子句将用来计算输出结果。如果规则被不带RETURNING的命令触发,那么规则的RETURNING子句将被忽略。目前仅允许无条件的INSTEAD规则包含RETURNING子句,而且在同一个事件内的所有规则中最多只能有一个RETURNING子句。这样就确保只有一个RETURNING子句可以用于计算结果。如果在任何有效规则中都不存在RETURNING子句,该视图上的RETURNING查询将被拒绝。 目前,ON SELECT规则必须是无条件的INSTEAD规则并且必须有一个由单独一条SELECT查询组成的动作。因此,一条ON SELECT规则实际上把表变成了一个视图,它的可见内容是由该规则的SELECT命令返回,而不是直接存在该表中的内容(如果有)。
  • 参数说明 name 创建的规则名。它必须在同一个表上的所有规则名字中唯一。 取值范围:符合标识符命名规范的字符串,且最大长度不超过63个字符。 event SELECT、INSERT、UPDATE、DELETE事件之一。 table_name 规则作用的表或者视图的名字(可以有模式修饰)。 condition 返回boolean的SQL条件表达式,决定是否实际执行规则。表达式除了引用NEW和OLD之外不能引用任何表,并且不能有聚合函数。不建议使用int等数值类型作为condition,因为int等数值类型可以隐式转换为bool值(非0值隐式转换为true,0转换为false),可能导致非预期的结果。 INSTEAD INSTEAD指示使用该命令替换初始事件。 ALSO ALSO指示该命令应该在初始事件执行之后执行。如果既没有声明ALSO也没有声明INSTEAD, 那么ALSO为缺省值。 command 组成规则动作的命令。有效的命令是SELECT、 INSERT、UPDATE、 DELETE语句之一。
  • 语法格式 CREATE [ LARGE ] SEQUENCE name [ INCREMENT [ BY ] increment ] [ MINVALUE minvalue | NO MINVALUE | NOMINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE | NOMAXVALUE] [ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE | NOCYCLE ] [ OWNED BY { table_name.column_name | NONE } ];
  • 示例 创建一个名为serial的递增序列,从101开始: openGauss=# CREATE SEQUENCE serial START 101 CACHE 20; 从序列中选出下一个数字: openGauss=# SELECT nextval('serial'); nextval --------- 101 从序列中选出下一个数字: openGauss=# SELECT nextval('serial'); nextval --------- 102 创建与表关联的序列: openGauss=# CREATE TABLE customer_address( ca_address_sk integer not null, ca_address_id char(16) not null, ca_street_number char(10) , ca_street_name varchar(60) , ca_street_type char(15) , ca_suite_number char(10) , ca_city varchar(60) , ca_county varchar(30) , ca_state char(2) , ca_zip char(10) , ca_country varchar(20) , ca_gmt_offset decimal(5,2) , ca_location_type char(20) );openGauss=# CREATE SEQUENCE serial1 START 101 CACHE 20OWNED BY customer_address.ca_address_sk;--删除表和序列openGauss=# DROP TABLE customer_address;openGauss=# DROP SEQUENCE serial cascade;openGauss=# DROP SEQUENCE serial1 cascade;
  • 参数说明 name 将要创建的序列名称。 取值范围: 仅可以使用小写字母(a~z)、 大写字母(A~Z),数字和特殊字符"#","_","$"的组合。 increment 指定序列的步长。一个正数将生成一个递增的序列,一个负数将生成一个递减的序列。 缺省值为1。 MINVALUE minvalue | NO MINVALUE| NOMINVALUE 执行序列的最小值。如果没有声明minvalue或者声明了NO MINVALUE,则递增序列的缺省值为1,递减序列的缺省值为-263-1。NOMINVALUE等价于NO MINVALUE MAXVALUE maxvalue | NO MAXVALUE| NOMAXVALUE 执行序列的最大值。如果没有声明maxvalue或者声明了NO MAXVALUE,则递增序列的缺省值为263-1,递减序列的缺省值为-1。NOMAXVALUE等价于NO MAXVALUE start 指定序列的起始值。缺省值:对于递增序列为minvalue,递减序列为maxvalue。 cache 为了快速访问,而在内存中预先存储序列号的个数。 缺省值为1,表示一次只能生成一个值,也就是没有缓存。 不建议同时定义cache和maxvalue或minvalue。因为定义cache后不能保证序列的连续性,可能会产生空洞,造成序列号段浪费。 CYCLE 用于使序列达到maxvalue或者minvalue后可循环并继续下去。 如果声明了NO CYCLE,则在序列达到其最大值后任何对nextval的调用都会返回一个错误。 NOCYCLE的作用等价于NO CYCLE。 缺省值为NO CYCLE。 若定义序列为CYCLE,则不能保证序列的唯一性。 OWNED BY 将序列和一个表的指定字段进行关联。这样,在删除那个字段或其所在表的时候会自动删除已关联的序列。关联的表和序列的所有者必须是同一个用户,并且在同一个模式中。需要注意的是,通过指定OWNED BY,仅仅是建立了表的对应列和sequence之间关联关系,并不会在插入数据时在该列上产生自增序列。 缺省值为OWNED BY NONE,表示不存在这样的关联。 通过OWNED BY创建的Sequence不建议用于其他表,如果希望多个表共享Sequence,该Sequence不应该从属于特定表。
  • 语法格式 CREATE [ OR REPLACE ] PROCEDURE procedure_name [ ( {[ argname ] [ argmode ] argtype [ { DEFAULT | := | = } expression ]}[,...]) ] [ { IMMUTABLE | STABLE | VOLATILE } | { SHIPPABLE | NOT SHIPPABLE } | {PACKAGE} | [ 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 | SET configuration_parameter { TO value | = value | FROM CURRENT } ][ ... ] { IS | AS } plsql_body /
  • 参数说明 OR REPLACE 当存在同名的存储过程时,替换原来的定义。 procedure_name 创建的存储过程名称,可以带有模式名。 取值范围:字符串,要符合标识符命名规范。 argmode 参数的模式。 VARIADIC用于声明数组类型的参数。 取值范围: IN,OUT,INOUT或VARIADIC。缺省值是IN。只有OUT模式的参数能跟在VARIADIC参数之后。 argname 参数的名称。 取值范围:字符串,要符合标识符命名规范。 argtype 参数的数据类型。可以使用%TYPE或%ROWTYPE间接引用变量或表的类型,详细可参考存储过程章节定义变量。 取值范围:可用的数据类型。 PACKAGE外PROCEDURE argtype中%TYPE不支持引用PACKAGE变量的类型。 expression 参数的默认表达式。 推荐使用方式:将所有默认值参数定义在所有非默认值参数后。 configuration_parameter value 把指定的配置参数设置为给定的值。如果value是DEFAULT,则在新的会话中使用系统的缺省设置。OFF关闭设置。 取值范围:字符串 DEFAULT OFF 指定默认值。 from current 取当前会话中的值设置为configuration_parameter的值。 IMMUTABLE、STABLE等 行为约束可选项。各参数的功能与CREATE FUNCTION类似,详细说明见CREATE FUNCTION plsql_body PL/SQL存储过程体。 当在存储过程体中进行创建用户、修改密码或加解密等涉及密码或密钥相关操作时,系统表及日志中会记录密码或密钥的明文信息。为防止敏感信息泄露,不建议用户在存储过程体中进行涉及密码或密钥等敏感信息的相关操作。 argname和argmode的顺序没有严格要求,推荐按照argname、argmode、argtype的顺序使用。
  • 注意事项 如果创建存储过程时参数或返回值带有精度,不进行精度检测。 创建存储过程时,存储过程定义中对表对象的操作建议都显示指定模式,否则可能会导致存储过程执行异常。 在创建存储过程时,存储过程内部通过SET语句设置current_schema和search_path无效。执行完函数search_path和current_schema与执行函数前的search_path和current_schema保持一致。 如果存储过程参数中带有出参,SELECT调用存储过程必须缺省出参,CALL调用存储过程调用非重载函数时必须指定出参,对于重载的package函数,out参数可以缺省,具体信息参见CALL的示例。 存储过程指定package属性时支持重载。 在创建procedure时,不能在avg函数外面嵌套其他agg函数,或者其他系统函数。 在存储过程内部调用其它无参数的存储过程时,可以省略括号,直接使用存储过程名进行调用。 在存储过程内部调用其他有出参的函数,如果在赋值表达式中调用时,被调函数的出参可以省略,给出了也会被忽略。 存储过程支持参数注释的查看与导出、导入。 存储过程支持介于IS/AS与plsql_body之间的注释的查看与导出、导入。 存储过程默认为SECURITY INVOKER权限,如果想将默认行为改为SECURITY DEFINER权限,需要设置guc参数behavior_compat_options='plsql_security_definer'。 被授予CREATE ANY FUNCTION权限的用户,可以在用户模式下创建/替换存储过程。 out/inout参数必须传入变量,不能够传入常量。 集中式环境下,想要调用in参数相同,out参数不同的存储过程,需要设置guc参数behavior_compat_options='proc_outparam_override',并且打开参数后,无论使用select还是call调用存储过程,都必须加上out参数。打开参数后,不支持使用perform调用存储过程或函数。 重载的存储过程在调用时变量需要明确具体的类型。 如果将定义者权限的存储过程创建到其他用户SCHEMA下,则会以其他用户的权限执行该存储过程,有越权风险,请谨慎使用。
  • 注意事项 定义同义词的用户成为其所有者。 若指定模式名称,则同义词在指定模式中创建。否则,在当前模式创建。 支持通过同义词访问的数据库对象包括:表、视图、函数和存储过程。 使用同义词时,用户需要具有对关联对象的相应权限。 支持使用同义词的DML语句包括:SELECT、INSERT、UPDATE、DELETE、EXPLAIN、CALL。 不建议对临时表创建同义词。如果需要创建,需要指定同义词的目标临时表的模式名,否则无法正常使用该同义词,并且在当前会话结束前执行DROP SYNONYM命令。 删除原对象后,与之关联同义词不会被级联删除,继续访问该同义词会报错,并提示已失效。
  • 示例 --创建模式ot。openGauss=# CREATE SCHEMA ot;--创建表ot.t1及其同义词t1。openGauss=# CREATE TABLE ot.t1(id int, name varchar2(10));openGauss=# CREATE OR REPLACE SYNONYM t1 FOR ot.t1;--使用同义词t1。openGauss=# SELECT * FROM t1;openGauss=# INSERT INTO t1 VALUES (1, 'ada'), (2, 'bob');openGauss=# UPDATE t1 SET t1.name = 'cici' WHERE t1.id = 2;--创建同义词v1及其关联视图ot.v_t1。openGauss=# CREATE SYNONYM v1 FOR ot.v_t1;openGauss=# CREATE VIEW ot.v_t1 AS SELECT * FROM ot.t1;--使用同义词v1。openGauss=# SELECT * FROM v1;--创建重载函数ot.add及其同义词add。openGauss=# CREATE OR REPLACE FUNCTION ot.add(a integer, b integer) RETURNS integer AS$$SELECT $1 + $2$$LANGUAGE sql;openGauss=# CREATE OR REPLACE FUNCTION ot.add(a decimal(5,2), b decimal(5,2)) RETURNS decimal(5,2) AS$$SELECT $1 + $2$$LANGUAGE sql;openGauss=# CREATE OR REPLACE SYNONYM add FOR ot.add;--使用同义词add。openGauss=# SELECT add(1,2);openGauss=# SELECT add(1.2,2.3);--创建存储过程ot.register及其同义词register。openGauss=# CREATE PROCEDURE ot.register(n_id integer, n_name varchar2(10))SECURITY INVOKERASBEGIN INSERT INTO ot.t1 VALUES(n_id, n_name);END;/openGauss=# CREATE OR REPLACE SYNONYM register FOR ot.register;--使用同义词register,调用存储过程。openGauss=# CALL register(3,'mia');--删除同义词。openGauss=# DROP SYNONYM t1;openGauss=# DROP SYNONYM IF EXISTS v1;openGauss=# DROP SYNONYM IF EXISTS add;openGauss=# DROP SYNONYM register;openGauss=# DROP SCHEMA ot CASCADE;
  • 注意事项 Sequence是一个存放等差数列的特殊表。这个表没有实际意义,通常用于为行或者表生成唯一的标识符。 如果给出一个模式名,则该序列就在给定的模式中创建,否则会在当前模式中创建。序列名必须和同一个模式中的其他序列、表、索引、视图或外表的名称不同。 创建序列后,在表中使用序列的nextval()函数和generate_series(1,N)函数对表插入数据,请保证nextval的可调用次数大于等于N+1次,否则会因为generate_series()函数会调用N+1次而导致报错。 Sequence默认最大值为2^63-1,如果使用了Large标识则最大值可以支持到2^127-1。 被授予CREATE ANY SEQUENCE权限的用户,可以在public模式和用户模式下创建序列。
  • 示例 --创建模式ds。openGauss=# CREATE SCHEMA ds;--将当前模式ds更名为ds_new。openGauss=# ALTER SCHEMA ds RENAME TO ds_new;--创建用户jack。openGauss=# CREATE USER jack PASSWORD '********';--将DS_NEW的所有者修改为jack。openGauss=# ALTER SCHEMA ds_new OWNER TO jack;--删除用户jack和模式ds_new。openGauss=# DROP SCHEMA ds_new;openGauss=# DROP USER jack;
  • 注意事项 索引自身也占用存储空间、消耗计算资源,创建过多的索引将对数据库性能造成负面影响(尤其影响数据导入的性能,建议在数据导入后再建索引)。因此,仅在必要时创建索引。 索引定义里的所有函数和操作符都必须是immutable类型的,即它们的结果必须只能依赖于它们的输入参数,而不受任何外部的影响(如另外一个表的内容或者当前时间)。这个限制可以确保该索引的行为是定义良好的。要在一个索引上或WHERE中使用用户定义函数,请把它标记为immutable类型函数。 分区表索引分为LOCAL索引与GLOBAL索引,LOCAL索引与某个具体分区绑定,而GLOBAL索引则对应整个分区表。 被授予CREATE ANY INDEX权限的用户,可以在public模式和用户模式下创建索引。 如果表达式索引中调用的是用户自定义函数,按照函数创建者权限执行表达式索引函数。
  • 功能描述 在指定的表上创建索引。 索引可以用来提高数据库查询性能,但是不恰当的使用将导致数据库性能下降。建议仅在匹配如下某条原则时创建索引: 经常执行查询的字段。 在连接条件上创建索引,对于存在多字段连接的查询,建议在这些字段上建立组合索引。例如,select * from t1 join t2 on t1.a=t2.a and t1.b=t2.b,可以在t1表上的a,b字段上建立组合索引。 where子句的过滤条件字段上(尤其是范围条件)。 在经常出现在order by、group by和distinct后的字段。 在分区表上创建索引与在普通表上创建索引的语法不太一样,使用时请注意,如当索引带GLOBAL/LOCAL关键字或者创建索引为GLOBAL索引时不支持创建部分索引。
共99354条