华为云用户手册

  • 功能描述 CREATE INCREMENTAL MATERIALIZED VIEW会创建一个增量物化视图,并且后续可以使用REFRESH MATERIALIZED VIEW(全量刷新)和REFRESH INCREMENTAL MATERIALIZED VIEW(增量刷新)刷新物化视图的数据。 CREATE INCREMENTAL MATERIALIZED VIEW类似于CREATE TABLE AS,不过它会记住被用来初始化该视图的查询, 因此它可以在后续中进行数据刷新。一个物化视图有很多和表相同的属性,但是不支持临时物化视图。
  • 示例 --创建一个普通表openGauss=# CREATE TABLE my_table (c1 int, c2 int);--创建全量物化视图openGauss=# CREATE MATERIALIZED VIEW my_mv AS SELECT * FROM my_table;--基表写入数据openGauss=# INSERT INTO my_table VALUES(1,1),(2,2);--对全量物化视图my_mv进行全量刷新openGauss=# REFRESH MATERIALIZED VIEW my_mv;
  • 示例 --创建一个普通表openGauss=# CREATE TABLE my_table (c1 int, c2 int);--创建增量物化视图openGauss=# CREATE INCREMENTAL MATERIALIZED VIEW my_imv AS SELECT * FROM my_table;--基表写入数据openGauss=# INSERT INTO my_table VALUES(1,1),(2,2);--对增量物化视图my_imv进行增量刷新openGauss=# REFRESH INCREMENTAL MATERIALIZED VIEW my_imv;
  • 参数说明 mv_name 要创建的物化视图的名称(可以被模式限定)。 取值范围:字符串,要符合标识符的命名规范。 column_name 新物化视图中的一个列名。物化视图支持指定列,指定列需要和后面的查询语句结果的列数量保持一致;如果没有提供列名,会从查询的输出列名中获取列名。 取值范围:字符串,要符合标识符的命名规范。 WITH ( storage_parameter [= value] [, ... ] ) 这个子句为表或索引指定一个可选的存储参数。详见CREATE TABLE。 TABLESPACE tablespace_name 指定新建物化视图所属表空间。如果没有声明,将使用默认表空间。 AS query 一个SELECT、TABLE 或者VALUES命令。这个查询将在一个安全受限的操作中运行。
  • 参数说明 IF NOT EXISTS 如果已经存在相同名称的表,不会抛出一个错误,而会发出一个通知,告知表关系已存在。 table_name 外表的表名。 取值范围:字符串,要符合标识符的命名规范。 column_name 外表中的字段名。 取值范围:字符串,要符合标识符的命名规范。 type_name 字段的数据类型。 SERVER server_name 外表的server名称。 OPTIONS ( option 'value' [, ... ] ) 选项与新外部表或外部表中的字段有关。允许的选项名称和值,是由每一个外部数据封装器指定的。 也是通过外部数据封装器的验证函数来验证。重复的选项名称是不被允许的(尽管表选项和表字段选项可以有相同的名字)。 file_fdw支持的options包括: filename 指定要读取的文件,必需的参数,且必须是一个绝对路径名。 format 远端server的文件格式,支持text/csv/binary/fixed四种格式,和COPY语句的FORMAT选项相同。 header 指定的文件是否有标题行,与COPY语句的HEADER选项相同。 delimiter 指定文件的分隔符,与COPY的DELIMITER选项相同。 quote 指定文件的引用字符,与COPY的QUOTE选项相同。 escape 指定文件的转义字符,与COPY的ESCAPE选项相同。 null 指定文件的null字符串,与COPY的NULL选项相同。 encoding 指定文件的编码,与COPY的ENCODING选项相同。 force_not_null 这是一个布尔选项。如果为真,则声明字段的值不应该匹配空字符串(也就是, 文件级别null选项)。与COPY的 FORCE_NOT_NULL选项里的字段相同。
  • 语法格式 CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [ column_name type_name [ OPTIONS ( option 'value' [, ... ] ) ] [ COLLATE collation ] [ column_constraint [ ... ] ] [, ... ]] ) SERVER server_name[ OPTIONS ( option 'value' [, ... ] ) ]这里column_constraint 可以是:[ CONSTRAINT constraint_name ]{ NOT NULL | NULL | DEFAULT default_expr }
  • 注意事项 在使用CREATE EXTENSION载入扩展到数据库中之前, 必须先安装好该扩展的支持文件。 CREATE EXTENSION命令安装一个新的扩展到一个数据库中,必须保证没有同名的扩展已经被安装。 安装一个扩展意味着执行一个扩展的脚本文件,这个脚本会创建一个新的SQL实体,例如函数,、数据类型、操作符、和索引支持的方法。 安装扩展需要有和创建他的组件对象相同的权限。对于大多数扩展这意味着需要超户或者数据库所有者的权限,对于后续的权限检查和该扩展脚本所创建的实体,运行CREATE EXTENSION命令的角色将变为扩展的所有者。 CREATE EXTENSION时如果数据库中存在与EXTENSION内同名的PACKAGE、同义词、操作符、目录、函数、存储过程、视图、表这些数据库对象,将会导致CREATE EXTENSION失败。
  • 参数说明 IF NOT EXISTS 如果系统已经存在一个同名的扩展,不会报错。这种情况下会给出一个提示。请注意该参数不保证系统存在的扩展和现在脚本创建的扩展相同。 extension_name 将被安装扩展的名字,数据库将使用文件 SHAREDIR/extension/extension_name.control 中的详细信息创建扩展 。 schema_name 扩展的实例被安装在该模式下,扩展的内容可以被重新安装。指定的模式必须已经存在,如果没有指定,扩展的控制文件也不指定一个模式,这样将使用默认模式。 扩展不认为它在任何模式里面:扩展在一个数据库范围内的名字是不受限制的,但是一个扩展的实例是属于一个模式的。 version 安装扩展的版本,可以写为一个标识符或者字符串.默认的版本在扩展的控制文件中指定。 old_version 当你想升级安装"old style" 模块中没有的内容时,你必须指定FROM old_version。这个选项使CREATE EXTENSION 运行一个安装脚本将新的内容安装到扩展中,而不是创建一个新的实体.注意SCHEMA指定了包括这些已存在实体的模式。
  • 语法格式 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} | {LOGIN | NOLOGIN} | {REPLICATION | NOREPLICATION} | {INDEPENDENT | NOINDEPENDENT} | {VCADMIN | NOVCADMIN} | {PERSISTENCE | NOPERSISTENCE} | CONNECTION LIMIT connlimit | VALID BEGIN 'timestamp' | VALID UNTIL 'timestamp' | RESOURCE POOL 'respool' | 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
  • 注意事项 Data Source名称在数据库中需唯一,遵循标识符命名规范,长度限制为63字节,过长则会被截断。 只有系统管理员或初始用户才有权限创建Data Source对象。且创建该对象的用户为其默认属主。 当在OPTIONS中出现password选项时,需要保证数据库每个节点的$GAUSSHOME/bin目录下存在datasource.key.cipher和datasource.key.rand文件,如果不存在这两个文件,请使用gs_guc工具生成并使用gs_ssh工具发布到数据库每个节点的$GAUSSHOME/bin目录下。
  • 参数说明 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加密以保证安全性。该加密所需密钥文件需要使用gs_guc工具生成并使用gs_ssh工具发布到数据库每个节点的$GAUSSHOME/bin目录下。username/password不应当包含'encryptOpt'前缀,否则会被认为是加密后的密文。 encoding表示与目标库交互的字符串编码方式(含发送的SQL语句和返回的字符类型数据),此处创建对象时不检查encoding取值的合法性,能否正确编解码取决于用户提供的编码方式是否在数据库本身支持的字符编码范围内。 optvalue 选项值。 取值范围:空或者非空字符串。
  • 示例 --创建一个空的Data Source对象,不含任何信息。openGauss=# CREATE DATA SOURCE ds_test1;--创建一个Data Source对象,含TYPE信息,VERSION为NULL。openGauss=# CREATE DATA SOURCE ds_test2 TYPE 'MPPDB' VERSION NULL;--创建一个Data Source对象,仅含OPTIONS。openGauss=# CREATE DATA SOURCE ds_test3 OPTIONS (dsn 'GaussDB', encoding 'utf8');--创建一个Data Source对象,含TYPE, VERSION, OPTIONS。openGauss=# CREATE DATA SOURCE ds_test4 TYPE 'unknown' VERSION '11.2.3' OPTIONS (dsn 'GaussDB', username 'userid', password 'pwd@123456', encoding '');--删除Data Source对象。openGauss=# DROP DATA SOURCE ds_test1;openGauss=# DROP DATA SOURCE ds_test2;openGauss=# DROP DATA SOURCE ds_test3;openGauss=# DROP DATA SOURCE ds_test4;
  • 注意事项 当enable_access_server_directory=off时,只允许初始用户创建directory对象;当enable_access_server_directory=on时,具有SYSADMIN权限的用户和继承了内置角色gs_role_directory_create权限的用户可以创建directory对象。 创建用户默认拥有此路径的READ和WRITE操作权限。 目录的默认owner为创建directory的用户。 以下路径禁止创建: 路径含特殊字符。 路径是相对路径。 路径是符号连接。 创建目录时会进行以下合法性校验: 创建时会检查添加路径是否为操作系统实际存在路径,如不存在会提示用户使用风险。 创建时会校验数据库初始化(omm)用户对于添加路径的权限(即操作系统目录权限,读/写/执行 - R/W/X),如果权限不全,会提示用户使用风险。 在数据库环境下用户指定的路径需要用户保证各节点上路径的一致性,否则在不同节点上执行会产生找不到路径的问题。
  • 示例(在使用JDBC连接数据库服务器的场景下) 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 /* * (1) 登录华为云官网(),进入“控制台”-“服务列表”-“数据加密服务 DEW”- “密钥管理”页面,创建一个密钥。 * 该服务即由华为云提供的密钥管理服务——KMS。当然,你还可通过编程接口进行密钥管理,详情请参考华为云公开文档 : * (https://support.huaweicloud.com/dew_faq/dew_01_0053.html) *//* *(2)与数据库服务器建立连接并执行本语法,在url中需开启全密态数据库的开关:enable_ce=1 * 说明:本部分代码作为示例代码,仅考虑通过最少代码实现最基本的功能 */import java.sql.*;public class CrtCmkTest { public static void main(String[] args) { String driver = "org.postgresql.Driver"; try { Class.forName(driver); } catch (Exception e) { e.printStackTrace(); return; } /* 用于与数据库服务器建立连接的信息 */ String dbUrl = "jdbc:postgresql://localhost:19900/postgres?enable_ce=1"; String dbUser = "alice"; String dbPassword = "********"; /* * 用于访问华为云KMS的身份认证信息与KMS项目信息 * 说明:本部分所有参数,均可在华为云官网“控制台”-“我的凭证”页面找到 */ String iamUser = "alice_for_kms"; String iamPassword = "********"; String kmsDomain = "hw00000000"; String kmsProjectName = "cn-east-3"; String kmsProjectId = "00000000000000000000000000000000"; /* 用于创建CMK密钥对象的SQL语句 */ String sql = "CREATE CLIENT MASTER KEY alice_cmk WITH ( " + "KEY_STORE = huawei_kms, KEY_PATH = \"00000000-0000-0000-0000-000000000000\" , ALGORITHM = AES_256);"; try { Connection conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword); conn.setClientInfo("iamUser", iamUser); conn.setClientInfo("iamPassword", iamPassword); conn.setClientInfo("kmsDomain", kmsDomain); conn.setClientInfo("kmsProjectName", kmsProjectName); conn.setClientInfo("kmsProjectId", kmsProjectId ); Statement stmt = conn.createStatement(); System.out.println("results: " + stmt.executeUpdate(sql)); } catch (SQLException e) { e.printStackTrace(); } }}
  • 参数说明 client_master_key_name 该参数作为密钥对象名,在同一命名空间下,需满足命名唯一性约束。 取值范围:字符串,需符合标识符的命名规范。 KEY_STORE 独立管理密钥的工具/服务。目前,仅支持由GaussDB提供的密钥管理工具gs_ktool,以及由华为云提供的在线密钥管理服务huawei_kms。取值范围为:gs_ktool,huawei_kms。 由于我们仅在客户端与KEY_STORE进行交互,当使用不同的客户端时,本语法中KEY_STORE参数支持的类型也不尽相同。当使用gsql执行本语法时,KEY_STORE仅支持gs_ktool,当使用JDBC执行本语法时,KEY_STORE仅支持huawei_kms。 KEY_PATH 用于指定密钥管理工具/服务中的一个密钥。通过KEY_STORE和KEY_PATH参数可唯一确定一个密钥实体。当KEY_STORE = gs_ktool时,取值范围为:gs_ktool/KEY_ID;当KEY_STORE = huawei_kms时,取值范围为:36字节的密钥ID。 由该语法创建的CMK对象中,存储了KEY_STORE和KEY_PATH信息。当需要读取密钥实体时,GaussDB能够根据CMK对象中存储的信息,自动地从指定KEY_STORE中读取指定的密钥实体。因此,在本语法中,KEY_PATH参数应指向一个已经存在的密钥实体。 ALGORITHM 用于指定该密钥实体将用于何种加密算法。当KEY_STORE = gs_ktool时,取值范围为:AES_256_CBC,SM4;当KEY_STORE = huawei_kms时,取值为:AES_256。
  • 注意事项 参数DEFAULT将在客户端和服务器之间默认执行源编码到目标编码之间的转换。要支持这个用法,需要定义双向转换,即从A到B和从B到A之间的转换。 创建转换需拥有函数的EXECUTE权限及目标模式的CREATE权限。 源编码和目标编码都不可以使用SQL_ASCII,因为在涉及SQL_ASCII “encoding”的情况下,服务器的行为是硬连接的。 使用DROP CONVERSION可以移除用户定义的转换。
  • 参数说明 DEFAULT DEFAULT子句表示这个转换是从源编码到目标编码的默认转换。在一个模式中对于每一个编码对,只应该有一个默认转换。 name 转换的名称,可以被模式限定。如果没有被模式限定,该转换被定义在当前模式中。在一个模式中,转换名称必须唯一。 source_encoding 源编码名称。 dest_encoding 目标编码名称。 function_name 被用来执行转换的函数。函数名可以被模式限定。如果没有,将在路径中查找该函数。 conv_proc( integer, -- 原编码ID integer, -- 目标编码ID cstring, -- 源字符串(空值终止的C字符串) internal,-- 目标(用一个空值终止的C字符串填充) integer -- 源字符串长度) RETURNS void;
  • 语法格式 CREATE AUDIT POLICY [ IF NOT EXISTS ] policy_name { { privilege_audit_clause | access_audit_clause } [ filter_group_clause ] [ ENABLE | DISABLE ] }; privilege_audit_clause: 1 PRIVILEGES { DDL | ALL } [ ON LABEL ( resource_label_name [, ... ] ) ] access_audit_clause: ACCESS { DML | ALL } [ ON LABEL ( resource_label_name [, ... ] ) ]
  • 示例 1 2 3 4 5 6 7 8 9101112131415161718192021 --创建dev_audit和bob_audit用户。openGauss=# CREATE USER dev_audit PASSWORD 'dev@1234';CREATE USER bob_audit password 'bob@1234';--创建一个表tb_for_auditopenGauss=# CREATE TABLE tb_for_audit(col1 text, col2 text, col3 text);--创建资源标签openGauss=# CREATE RESOURCE LABEL adt_lb0 add TABLE(tb_for_audit);--对数据库执行create操作创建审计策略openGauss=# CREATE AUDIT POLICY adt1 PRIVILEGES CREATE;--对数据库执行select操作创建审计策略openGauss=# CREATE AUDIT POLICY adt2 ACCESS SELECT;--仅审计记录用户dev_audit和bob_audit在执行针对adt_lb0资源进行的create操作数据库创建审计策略openGauss=# CREATE AUDIT POLICY adt3 PRIVILEGES CREATE ON LABEL(adt_lb0) FILTER ON ROLES(dev_audit, bob_audit);--仅审计记录用户dev_audit和bob_audit,客户端工具为psql和gsql,IP地址为'10.20.30.40', '127.0.0.0/24',在执行针对adt_lb0资源进行的select、insert、delete操作数据库创建审计策略。openGauss=# CREATE AUDIT POLICY adt4 ACCESS SELECT ON LABEL(adt_lb0), INSERT ON LABEL(adt_lb0), DELETE FILTER ON ROLES(dev_audit, bob_audit), APP(psql, gsql), IP('10.20.30.40', '127.0.0.0/24');
  • 参数说明 policy_name 审计策略名称,需要唯一,不可重复; 取值范围:字符串,要符合标识符的命名规范。 DDL 指的是针对数据库执行如下操作时进行审计,目前支持:CREATE、ALTER、DROP、ANALYZE、COMMENT、GRANT、REVOKE、SET、SHOW、LOGIN_ANY、LOGIN_FAILURE、LOGIN_SUCCESS、LOGOUT。 ALL 指的是上述DDL支持的所有对数据库的操作。 resource_label_name 资源标签名称。 DML 指的是针对数据库执行如下操作时进行审计,目前支持:SELECT、COPY、DEALLOCATE、DELETE、EXECUTE、INSERT、PREPARE、REINDEX、TRUNCATE、UPDATE。 FILTER_TYPE 描述策略过滤的条件类型,包括IP | APP | ROLES。 filter_value 指具体过滤信息内容。 ENABLE|DISABLE 可以打开或关闭统一审计策略。若不指定ENABLE|DISABLE,语句默认为ENABLE。
  • 参数说明 column_encryption_key_name 该参数作为密钥对象名,在同一命名空间下,需满足命名唯一性约束。 取值范围:字符串,要符合标识符的命名规范。 CLIENT_MASTER_KEY 指定用于加密本CEK的CMK,取值为:CMK对象名,该CMK对象由CREATE CLIENT MASTER KEY语法创建。 ALGORITHM 指定该CEK将用于何种加密算法,取值范围为:AEAD_AES_256_CBC_HMAC_SHA256、AEAD_AES_128_CBC_HMAC_SHA256和SM4_SM3; ENCRYPTED_VALUE(可选项) 该值为用户指定的密钥口令,密钥口令长度范围为28 ~ 256个字符,28个字符派生出来的密钥安全强度满足AES128,若用户需要用AES256,密钥口令的长度需要39个字符,如果不指定,则会自动生成256字符的密钥。 国密算法约束:由于SM2、SM3、SM4等算法属于中国国家密码标准算法,为规避法律风险,需配套使用。如果创建CMK时指定SM4算法来加密CEK,则创建CEK时必须指定SM4_SM3算法来加密数据。 ENCRYPTED_VALUE字段约束:如果使用由Huawei KMS生成的CMK来对CEK进行加密,在CREATE COLUMN ENCRYPTION KEY的语法中,如果使用ENCRYPTED_VALUE字段传入密钥,则传入的密钥的长度应为16字节的整数倍。
  • 参数说明 source_type 转换的源数据类型。 target_type 转换的目标数据类型。 function_name(argument_type [, ...]) 用于执行转换的函数。 这个函数名可以是用模式名修饰的。 如果它没有用模式名修饰, 那么该函数将从模式搜索路径中找出来。 函数的结果数据类型必须匹配转换的目标类型。 它的参数在下面讨论。 WITHOUT FUNCTION 表明源类型是对目标类型是二进制可强制转换的,所以没有函数需要执行此转换。 WITH INOUT 表明转换是I/O转换,通过调用源数据类型的输出函数来执行,并将结果传给目标数据类型的输入函数。 AS ASSIGNMENT 表示转换可以在赋值模式下隐含调用。 AS IMPLICIT 表示转换可以在任何环境里隐含调用。 转换实现函数可以有一到三个参数。第一个参数的类型必须与转换的源类型相同的,或可以从转换的源类型二进制可强制转换的。第二个参数,如果存在,必须是integer类型;它接收这些与目标类型相关联的类型修饰符,或者若什么都没有则是-1。第三个参数,如果存在,必须是boolean类型;若转换是一个显式类型转换则会收到true,否则是false。 一个转换函数的返回类型必须是与转换的目标类型相同或者对转换的目标类型二进制可强制转换。 通常,一个转换必须有不同的源和目标数据类型。然而,若有多于一个参数的转换实现函数,则允许声明一个有相同的源和目标类型的转换。这用于表示系统目录中的特定类型的长度强制函数。命名的函数用于强制一个该类型的值为第二个参数给出的类型修饰符值。 如果一个类型转换的源类型和目标类型不同,并且接收多于一个参数,它就表示从一种类型转换成另外一种类型只用一个步骤,并且同时实施长度转换。如果没有这样的项可用,那么转换成一个使用了类型修饰词的类型将涉及两个步骤,一个是在数据类型之间转换,另外一个是施加修饰词指定的转换。 对域类型的转换目前没有作用。转换一般是针对域相关的所属数据类型。 cast转换是以调用它的用户的权限来执行,高权限用户在调用其他用户创建的转换时,需要检查转换函数的执行内容,以免转换的创建者借用执行者的权限执行了越权的操作。
  • 注意事项 每个对象只存储一条注释,因此要修改一个注释,对同一个对象发出一条新的COMMENT命令即可。要删除注释,在文本字符串的位置写上NULL即可。当删除对象时,注释自动被删除掉。 目前注释浏览没有安全机制:任何连接到某数据库上的用户都可以看到所有该数据库对象的注释。共享对象(比如数据库、角色、表空间)的注释是全局存储的,连接到任何数据库的任何用户都可以看到它们。因此,不要在注释里存放与安全有关的敏感信息。 对大多数对象,只有对象的所有者或者被授予了对象COMMENT权限的用户可以设置注释,系统管理员默认拥有该权限。 角色没有所有者,所以COMMENT ON ROLE命令仅可以由系统管理员对系统管理员角色执行,有CREATEROLE权限的角色也可以为非系统管理员角色设置注释。系统管理员可以对所有对象进行注释。
  • 语法格式 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';
  • 语法格式 CREATE AGGREGATE name ( input_data_type [ , ... ] ) ( SFUNC = sfunc, STYPE = state_data_type [ , FINALFUNC = ffunc ] [ , INITCOND = initial_condition ] [ , SORTOP = sort_operator ])or the old syntaxCREATE AGGREGATE name ( BASETYPE = base_type, SFUNC = sfunc, STYPE = state_data_type [ , FINALFUNC = ffunc ] [ , INITCOND = initial_condition ] [ , SORTOP = sort_operator ])
  • 参数说明 name 要创建的聚合函数名(可以有模式修饰) 。 input_data_type 该聚合函数要处理的输入数据类型。要创建一个零参数聚合函数,可以使用*代替输入数据类型列表。 (count(*)就是这种聚合函数的一个实例。 ) base_type 在以前的CREATE AGGREGATE语法中,输入数据类型是通过basetype参数指定的,而不是写在聚合的名称之后。 需要注意的是这种以前语法仅允许一个输入参数。 要创建一个零参数聚合函数,可以将basetype指定为"ANY"(而不是*)。 sfunc 将在每一个输入行上调用的状态转换函数的名称。 对于有N个参数的聚合函数,sfunc必须有 +1 个参数,其中的第一个参数类型为state_data_type,其余的匹配已声明的输入数据类型。 函数必须返回一个state_data_type类型的值。 这个函数接受当前状态值和当前输入数据,并返回下个状态值。 state_data_type 聚合的状态值的数据类型。 ffunc 在转换完所有输入行后调用的最终处理函数,它计算聚合的结果。 此函数必须接受一个类型为state_data_type的参数。 聚合的输出数据 类型被定义为此函数的返回类型。 如果没有声明ffunc则使用聚合结果的状态值作为聚合的结果,且输出类型为state_data_type。 initial_condition 状态值的初始设置(值)。 它必须是一个state_data_type类型可以接受的文本常量值。 如果没有声明,状态值初始为 NULL 。 sort_operator 用于MIN或MAX类型聚合的排序操作符。 这个只是一个操作符名 (可以有模式修饰)。这个操作符假设接受和聚合一样的输入数据类型。
  • 参数说明 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 注释。
  • 语法格式 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 ]
  • 语法格式 从一个文件拷贝数据到一个表。 COPY table_name [ ( column_name [, ...] ) ] FROM { 'filename' | STDIN } [ [ USING ] DELIMITERS 'delimiters' ] [ WITHOUT ESCAPING ] [ LOG ERRORS ] [ REJECT LIMIT 'limit' ] [ WITH ( option [, ...] ) ] | copy_option | TRANSFORM ( { column_name [ data_type ] [ AS transform_expr ] } [, ...] ) | FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [ ...] ] ]; 语法中的FIXED FORMATTER ( { column_name( offset, length ) } [, ...] )以及 [ copy_option [ ...] ] 的无冲突项可以任意排列组合。 把一个表的数据拷贝到一个文件。 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 ) } [, ...] )以及 [ copy_option [ ...] ] 的无冲突项可以任意排列组合。 其中可选参数option子句语法为: 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子句语法为: 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 [ { 'one' | 'multi' } ]| COMPATIBLE_ILLEGAL_CHARS | DATE_FORMAT 'date_format_string' | TIME_FORMAT 'time_format_string' | TIMESTAMP_FORMAT 'timestamp_format_string' | SMALLDATETIME_FORMAT 'smalldatetime_format_string'| SKIP int_number| WHEN { ( start - end ) | column_name } { = | != } 'string'| SEQUENCE ( { column_name ( integer [, incr] ) [, ...] } )| FILLER ( { column_name [, ...] } )| CONSTANT ( { column_name 'constant_string' [, ...] } )
  • 示例 --将tpcds.ship_mode中的数据拷贝到/home/omm/ds_ship_mode.dat文件中。openGauss=# COPY tpcds.ship_mode TO '/home/omm/ds_ship_mode.dat';--将tpcds.ship_mode 输出到stdout。openGauss=# COPY tpcds.ship_mode TO stdout;--创建tpcds.ship_mode_t1表。openGauss=# CREATE TABLE tpcds.ship_mode_t1( SM_SHIP_MODE_SK INTEGER NOT NULL, SM_SHIP_MODE_ID CHAR(16) NOT NULL, SM_TYPE CHAR(30) , SM_CODE CHAR(10) , SM_CARRIER CHAR(20) , SM_CONTRACT CHAR(20))WITH (ORIENTATION = COLUMN,COMPRESSION=MIDDLE);--从stdin拷贝数据到表tpcds.ship_mode_t1。openGauss=# COPY tpcds.ship_mode_t1 FROM stdin;--从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1。openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat';--从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1,应用TRANSFORM表达式转换,取SM_TYPE列左边10个字符插入到表中。openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' TRANSFORM (SM_TYPE AS LEFT(SM_TYPE, 10));--从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1,使用参数如下:导入格式为TEXT(format 'text'),分隔符为'\t'(delimiter E'\t'),忽略多余列(ignore_extra_data 'true'),不指定转义(noescaping 'true')。openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' WITH(format 'text', delimiter E'\t', ignore_extra_data 'true', noescaping 'true');--从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1,使用参数如下:导入格式为FIXED(FIXED),指定定长格式(FORMATTER(SM_SHIP_MODE_SK(0, 2), SM_SHIP_MODE_ID(2,16), SM_TYPE(18,30), SM_CODE(50,10), SM_CARRIER(61,20), SM_CONTRACT(82,20))),忽略多余列(ignore_extra_data),有数据头(header)。openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' FIXED FORMATTER(SM_SHIP_MODE_SK(0, 2), SM_SHIP_MODE_ID(2,16), SM_TYPE(18,30), SM_CODE(50,10), SM_CARRIER(61,20), SM_CONTRACT(82,20)) header ignore_extra_data;--删除tpcds.ship_mode_t1。openGauss=# DROP TABLE tpcds.ship_mode_t1;
共100000条