华为云用户手册

  • 语法格式 CREATE TYPE name AS ( [ attribute_name data_type [ COLLATE collation ] [, ... ] ] )CREATE TYPE name ( INPUT = input_function, OUTPUT = output_function [ , RECEIVE = receive_function ] [ , SEND = send_function ] [ , TYPMOD_IN =type_modifier_input_function ] [ , TYPMOD_OUT =type_modifier_output_function ] [ , ANALYZE = analyze_function ] [ , INTERNALLENGTH = { internallength |VARIABLE } ] [ , PASSEDBYVALUE ] [ , ALIGNMENT = alignment ] [ , STORAGE = storage ] [ , LIKE = like_type ] [ , CATEGORY = category ] [ , PREFERRED = preferred ] [ , DEFAULT = default ] [ , ELEMENT = element ] [ , DELIMITER = delimiter ] [ , COLLATABLE = collatable ])CREATE TYPE nameCREATE TYPE name AS ENUM ( [ 'label' [, ... ] ] )CREATE TYPE name AS TABLE OF data_type
  • 参数说明 name 要创建的词典的名称(可指定模式名,否则在当前模式下创建)。 取值范围:符合标识符命名规范的字符串,且最大长度不超过63个字符。 template 模板名。 取值范围:系统表PG_TS_TEMPLATE中定义的模板:Simple/Synonym/Thesaurus/Ispell/Snowball。 option 参数名。与template值对应,不同的词典模板具有不同的参数列表,且与指定顺序无关。 Simple词典对应的option STOPWORDS 停用词表文件名,默认后缀名为stop。停用词文件格式为一组word列表,每行定义一个停用词。词典处理时,文件中的空行和空格会被忽略,并将stopword词组转换为小写形式。 ACCEPT 是否将非停用词设置为已识别。默认值为true。 当Simple词典设置参数ACCEPT=true时,将不会传递任何token给后继词典,此时建议将其放置在词典列表的最后。反之,当ACCEPT=false时,建议将该Simple词典放置在列表中的至少一个词典之前。 FILEPATH 词典文件所在目录。目录可以指定为本地目录和OBS目录(只能在安全模式下指定OBS目录,通过启动时添加securitymode选项进入安全模式)。其中,本地目录格式为"file://absolute_path",OBS目录格式为"obs://bucket_name/path accesskey=ak secretkey=sk region=rg"。默认值为预定义词典文件所在目录。FILEPATH参数必须和STOPWORDS参数同时指定,不允许单独指定。 Synonym词典对应的option SYNONYM 同义词词典的定义文件名,默认后缀名为syn。 文件格式为一组同义词列表,每行格式为"token synonym",即token和其对应的synonym,中间以空格相连。 CASESENSITIVE 设置是否大小写敏感,默认值为false,此时词典文件中的token和synonym均会转为小写形式处理。如果设置为true,则不会进行小写转换。 FILEPATH 同义词词典文件所在目录。目录可以指定为本地目录和OBS目录两种形式(只能在安全模式下指定OBS目录,通过启动时添加securitymode选项进入安全模式)。其中,本地目录格式为"file://absolute_path",OBS目录格式为"obs://bucket_name/path accesskey=ak secretkey=sk region=rg"。默认值为预定义词典文件所在目录。 Thesaurus词典对应的option DICTFILE 词典定义文件名,默认后缀名为ths。 文件格式为一组同义词列表,每行格式为"sample words : indexed words",中间冒号(:)作为短语和其替换词间的分隔符。TZ词典处理时,如果有多个匹配的sample words,将选择最长匹配输出。 DICTIONARY 用于词规范化的子词典名,必须且仅能定义一个。该词典必须是已经存在的,在检查短语匹配之前使用,用于识别和规范输入文本。 如果子词典无法识别输入词,将会报错。此时,需要移除该词或者更新子词典使其识别。此外,可在indexed words的开头放上一个星号(*)来跳过在其上应用子词典,但是所有sample words必须可以被子词典识别。 如果词典文件定义的sample words中,含有子词典中定义的停用词,需要用问号(?)替代停用词。假设a和the是子词典中所定义的停用词,如下: ? one ? two : swsw 上述同义词组定义会匹配"a one the two"以及"the one a two",这两个短语均会被swsw替代输出。 FILEPATH 词典定义文件所在目录。目录可以指定为本地目录和OBS目录两种形式(只能在安全模式下指定OBS目录,通过启动时添加securitymode选项进入安全模式)。其中,本地目录格式为"file://absolute_path",OBS目录格式为"obs://bucket_name/path accesskey=ak secretkey=sk region=rg"。默认值为预定义词典文件所在目录。 Ispell词典 DICTFILE 词典定义文件名,默认后缀名为dict。 AFFFILE 词缀文件名,默认后缀名为affix。 STOPWORDS 停用词文件名,默认后缀名为stop,文件格式要求与Simple类型词典的停用词文件相同。 FILEPATH 词典文件所在目录。可以指定为本地目录和OBS目录两种形式(只能在安全模式下指定OBS目录,通过启动时添加securitymode选项进入安全模式)。其中,本地目录格式为"file://absolute_path",OBS目录格式为"obs://bucket_name/path accesskey=ak secretkey=sk region=rg"。默认值为预定义词典文件所在目录。 Snowball词典 LANGUAGE 语言名,标识使用哪种语言的词干分析算法。算法按照对应语言中的拼写规则,缩减输入词的常见变体形式为一个基础词或词干。 STOPWORDS 停用词表文件名,默认后缀名为stop,文件格式要求与Simple类型词典的停用词文件相同。 FILEPATH 词典定义文件所在目录。可以指定为本地目录或者OBS目录(只能在安全模式下指定OBS目录,通过启动时添加securitymode选项进入安全模式)。其中,本地目录格式为"file://absolute_path",OBS目录格式为"obs://bucket_name/path accesskey=ak secretkey=sk region=rg"。默认值为预定义词典文件所在目录。FILEPATH参数必须和STOPWORDS参数同时指定,不允许单独指定。 词典定义文件的文件名仅支持小写字母、数据、下划线混合。 value 参数值。如果不是简单的标识符或数字,则参数值必须加单引号(标示符和数字同样可以加上单引号)。
  • 语法格式 CREATE TABLESPACE tablespace_name [ OWNER user_name ] [RELATIVE] LOCATION 'directory' [ MAXSIZE 'space_size' ] [with_option_clause]; 其中普通表空间的with_option_clause为: WITH ( {filesystem= { 'general'| "general" | general} | random_page_cost = { 'value ' | value } | seq_page_cost = { 'value ' | value }}[,...])
  • 示例 --创建表空间。openGauss=# CREATE TABLESPACE ds_location1 RELATIVE LOCATION 'tablespace/tablespace_1';--创建用户joe。openGauss=# CREATE ROLE joe IDENTIFIED BY 'xxxxxxxxx';--创建用户jay。openGauss=# CREATE ROLE jay IDENTIFIED BY 'xxxxxxxxx';--创建表空间,且所有者指定为用户joe。openGauss=# CREATE TABLESPACE ds_location2 OWNER joe RELATIVE LOCATION 'tablespace/tablespace_1';--把表空间ds_location1重命名为ds_location3。openGauss=# ALTER TABLESPACE ds_location1 RENAME TO ds_location3;--改变表空间ds_location2的所有者。openGauss=# ALTER TABLESPACE ds_location2 OWNER TO jay;--删除表空间。openGauss=# DROP TABLESPACE ds_location2;openGauss=# DROP TABLESPACE ds_location3;--删除用户。openGauss=# DROP ROLE joe;openGauss=# DROP ROLE jay;
  • 注意事项 系统管理员或者继承了内置角色gs_role_tablespace权限的用户可以创建表空间。 不允许在一个事务块内部执行CREATE TABLESPACE。 执行CREATE TABLESPACE失败,如果内部创建目录(文件)操作成功了就会产生残留的目录(文件),重新创建时需要用户手动清理表空间指定的目录下残留的内容。如果在创建过程中涉及到数据目录下的表空间软连接残留,需要先将软连接的残留文件删除,再重新执行OM相关操作。 CREATE TABLESPACE不支持两阶段事务,如果部分节点执行失败,不支持回滚。 创建表空间前的准备工作参考下述参数说明。 在公有云场景下一般不建议用户使用自定义的表空间。原因:用户自定义表空间通常配合主存(即默认表空间所在的存储设备,如磁盘)以外的其它存储介质使用,以隔离不同业务可以使用的IO资源,而在公有云场景下,存储设备都是采用标准化的配置,无其它可用的存储介质,自定义表空间使用不当不利于系统长稳运行以及影响整体性能,因此建议使用默认表空间即可。
  • 示例 --创建文本搜索配置。openGauss=# CREATE TEXT SEARCH CONFIGURATION ngram2 (parser=ngram) WITH (gram_size = 2, grapsymbol_ignore = false);--创建文本搜索配置。openGauss=# CREATE TEXT SEARCH CONFIGURATION ngram3 (copy=ngram2) WITH (gram_size = 2, grapsymbol_ignore = false);--添加类型映射。openGauss=# ALTER TEXT SEARCH CONFIGURATION ngram2 ADD MAPPING FOR multisymbol WITH simple;--创建用户joe。openGauss=# CREATE USER joe IDENTIFIED BY 'xxxxxxxxx';--修改文本搜索配置的所有者。openGauss=# ALTER TEXT SEARCH CONFIGURATION ngram2 OWNER TO joe;--修改文本搜索配置的schema。openGauss=# ALTER TEXT SEARCH CONFIGURATION ngram2 SET SCHEMA joe;--重命名文本搜索配置。openGauss=# ALTER TEXT SEARCH CONFIGURATION joe.ngram2 RENAME TO ngram_2;--删除类型映射。openGauss=# ALTER TEXT SEARCH CONFIGURATION joe.ngram_2 DROP MAPPING IF EXISTS FOR multisymbol;--删除文本搜索配置。openGauss=# DROP TEXT SEARCH CONFIGURATION joe.ngram_2;openGauss=# DROP TEXT SEARCH CONFIGURATION ngram3;--删除Schema及用户joe。openGauss=# DROP SCHEMA IF EXISTS joe CASCADE;openGauss=# DROP ROLE IF EXISTS joe;
  • 注意事项 若仅声明分析器,那么新的文本搜索配置初始没有从符号类型到词典的映射, 因此会忽略所有的单词。后面必须调用ALTER TEXT SEARCH CONFIGURATION命令创建映射使配置生效。如果声明了COPY选项,那么会自动拷贝指定的文本搜索配置的解析器、映射、配置选项等信息。 若模式名称已给出,那么文本搜索配置会在声明的模式中创建。否则会在当前模式创建。 定义文本搜索配置的用户成为其所有者。 PARSER和COPY选项是互相排斥的,因为当一个现有配置被复制,其分析器配置也被复制了。 若仅声明分析器,那么新的文本搜索配置初始没有从符号类型到词典的映射, 因此会忽略所有的单词。
  • 参数说明 name 要创建的文本搜索配置的名称。该名称可以有模式修饰。 parser_name 用于该配置的文本搜索分析器的名称。 source_config 要复制的现有文本搜索配置的名称。 configuration_option 文本搜索配置的配置参数,主要是针对parser_name执行的解析器,或者source_config隐含的解析器而言的。 取值范围:目前共支持default、ngram两种类型的解析器,其中default类型的解析器没有对应的configuration_option,ngram类型解析器对应的configuration_option如表1所示。 表1 ngram类型解析器对应的配置参数 解析器 配置参数 参数描述 取值范围 ngram gram_size 分词长度。 正整数,1~4 默认值:2 punctuation_ignore 是否忽略标点符号。 true(默认值):忽略标点符号。 false:不忽略标点符号。 grapsymbol_ignore 是否忽略图形化字符。 true:忽略图形化字符。 false(默认值):不忽略图形化字符。
  • 语法格式 CREATE [ [ GLOBAL | LOCAL ] [ TEMPORARY | TEMP ] | UNLOGGED ] TABLE table_name [ (column_name [, ...] ) ] [ WITH ( {storage_parameter = value} [, ... ] ) ] [ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ] [ COMPRESS | NOCOMPRESS ] [ TABLESPACE tablespace_name ] AS query [ WITH [ NO ] DATA ];
  • 参数说明 UNLOGGED 指定表为非日志表。在非日志表中写入的数据不会被写入到预写日志中,这样就会比普通表快很多。但是,它也是不安全的,非日志表在冲突或异常关机后会被自动删截。非日志表中的内容也不会被复制到备用服务器中。在该类表中创建的索引也不会被自动记录。 使用场景:非日志表不能保证数据的安全性,用户应该在确保数据已经做好备份的前提下使用,例如系统升级时进行数据的备份。 故障处理:当异常关机等操作导致非日志表上的索引发生数据丢失时,用户应该对发生错误的索引进行重建。 GLOBAL | LOCAL 创建临时表时可以在TEMP或TEMPORARY前指定GLOBAL或LOCAL关键字。如果指定GLOBAL关键字,GaussDB会创建全局临时表,否则GaussDB会创建本地临时表。 TEMPORARY | TEMP 如果指定TEMP或TEMPORARY关键字,则创建的表为临时表。临时表分为全局临时表和本地临时表两种类型。创建临时表时如果指定GLOBAL关键字则为全局临时表,否则为本地临时表。 全局临时表的元数据对所有会话可见,会话结束后元数据继续存在。会话与会话之间的用户数据、索引和统计信息相互隔离,每个会话只能看到和更改自己提交的数据。全局临时表有两种模式:一种是基于会话级别的(ON COMMIT PRESERVE ROWS), 当会话结束时自动清空用户数据;一种是基于事务级别的(ON COMMIT DELETE ROWS), 当执行commit或rollback时自动清空用户数据。建表时如果没有指定ON COMMIT选项,则缺省为会话级别。与本地临时表不同,全局临时表建表时可以指定非pg_temp_开头的schema。 本地临时表只在当前会话可见,本会话结束后会自动删除。因此,在除当前会话连接的数据库节点故障时,仍然可以在当前会话上创建和使用临时表。由于临时表只在当前会话创建,对于涉及对临时表操作的DDL语句,会产生DDL失败的报错。因此,建议DDL语句中不要对临时表进行操作。TEMP和TEMPORARY等价。 本地临时表通过每个会话独立的以pg_temp开头的schema来保证只对当前会话可见,因此,不建议用户在日常操作中手动删除以pg_temp,pg_toast_temp开头的schema。 如果建表时不指定TEMPORARY/TEMP关键字,而指定表的schema为当前会话的pg_temp_开头的schema,则此表会被创建为临时表。 ALTER/DROP全局临时表和索引,如果其它会话正在使用它,禁止操作。 全局临时表的DDL只会影响当前会话的用户数据和索引。例如truncate、reindex、analyze只对当前会话有效。 table_name 要创建的表名。 取值范围:字符串,要符合标识符的命名规范。 column_name 新表中要创建的字段名。 取值范围:字符串,要符合标识符的命名规范。 WITH ( storage_parameter [= value] [, ... ] ) 这个子句为表或索引指定一个可选的存储参数。参数的详细说明如下所示。 FILLFACTOR 一个表的填充因子(fillfactor)是一个介于10和100之间的百分数。100(完全填充)是默认值。如果指定了较小的填充因子,INSERT操作仅按照填充因子指定的百分率填充表页。每个页上的剩余空间将用于在该页上更新行,这就使得UPDATE有机会在同一页上放置同一条记录的新版本,这比把新版本放置在其他页上更有效。对于一个从不更新的表将填充因子设为100是最佳选择,但是对于频繁更新的表,选择较小的填充因子则更加合适。该参数只对行存表有效。 取值范围:10~100 ORIENTATION 取值范围: COLUMN:表的数据将以列式存储。 ROW(缺省值):表的数据将以行式存储。 COMPRESSION 指定表数据的压缩级别,它决定了表数据的压缩比以及压缩时间。一般来讲,压缩级别越高,压缩比也越大,压缩时间也越长;反之亦然。实际压缩比取决于加载的表数据的分布特征。 取值范围: 列存表的有效值为YES/NO/LOW/MIDDLE/HIGH,默认值为LOW。 行存表不支持压缩。 MAX_BATCHROW 指定了在数据加载过程中一个存储单元可以容纳记录的最大数目。该参数只对列存表有效。 取值范围:10000~60000 ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ON COMMIT选项决定在事务中执行创建临时表操作,当事务提交时,此临时表的后续操作。有以下三个选项,当前仅支持PRESERVE ROWS和DELETE ROWS选项。 PRESERVE ROWS(缺省值):提交时不对临时表执行任何操作,临时表及其表数据保持不变。 DELETE ROWS:提交时删除临时表中数据。 DROP:提交时删除此临时表。只支持删除本地临时表,不支持删除全局临时表。 COMPRESS / NOCOMPRESS 创建一个新表时,需要在创建表语句中指定关键字COMPRESS,这样,当对该表进行批量插入时就会触发压缩特性。该特性会在页范围内扫描所有元组数据,生成字典、压缩元组数据并进行存储。指定关键字NOCOMPRESS则不对表进行压缩。行存表不支持压缩。 缺省值:NOCOMPRESS,即不对元组数据进行压缩。 TABLESPACE tablespace_name 指定新表将要在tablespace_name表空间内创建。如果没有声明,将使用默认表空间。 AS query 一个SELECT VALUES命令或者一个运行预备好的SELECT或VALUES查询的EXECUTE命令。 [ WITH [ NO ] DATA ] 创建表时,是否也插入查询到的数据。默认是要数据,选择“NO”参数时,则不要数据。
  • 功能描述 根据查询结果创建表。 CREATE TABLE AS创建一个表并且用来自SELECT命令的结果填充该表。该表的字段和SELECT输出字段的名称及数据类型相关。不过用户可以通过明确地给出一个字段名称列表来覆盖SELECT输出字段的名称。 CREATE TABLE AS对源表进行一次查询,然后将数据写入新表中,而查询视图结果会根据源表的变化而有所改变。相比之下,每次做查询的时候,视图都重新计算定义它的SELECT语句。
  • 参数说明 subscription_name 新订阅的名称。 CONNECTION 'conninfo' 连接发布端的字符串。 如'host=1.1.1.1,2.2.2.2 port=10000,20000 dbname=postgres user=repusr1 password=password_123'。 字符串中的字段见链接参数章节。下面是常用的链接参数。 host 发布端IP地址,可以同时指定发布端主机和备机的IP地址,如果同时指定了多个IP,以英文逗号分隔。 port 发布端端口此处的端口不能使用主端口,而应该使用主端口+1端口,否则会与线程池冲突。 host和port的数量要一致,并且要一一对应。 dbname 发布所在的数据库。 user和password 用于连接发布端且具有系统管理员权限(SYSADMIN)或者运维管理员权限(OPRADMIN)的用户名和密码。password需要加密,创建订阅前需要在订阅端执行gs_guc generate -S xxxxxx -D $GAUSSHOME/bin -o subscription。 PUBLICATION publication_name 要订阅的发布端的发布名称,一个订阅可以对应多个发布。 WITH ( subscription_parameter [= value] [, ... ] ) 该子句指定订阅的可选参数。支持的参数有: enabled (boolean) 指定订阅是否应该主动复制,或者是否应该只是设置,但尚未启动。默认值是true。 slot_name (string) 要使用的复制插槽的名称。默认使用订阅名称作为复制槽的名称。 如果创建订阅时设置enabled为false,则slot_name将被强制设置为NONE,即空值,即使用户指定了slot_name的值,表示复制槽不存在。 synchronous_commit (enum) 该参数的值会覆盖synchronous_commit设置。 默认值是off。 对于逻辑复制使用off是安全的,如果订阅端由于缺少同步而丢失事务,数据将从发布者再次发送。进行同步逻辑复制时,一个不同的设置可能是合适的。逻辑复制线程向发布端报告写入和刷新的位置,当使用同步复制时,发布端将等待实际刷新。这意味着,当订阅用于同步复制时,将订阅者的synchronous_commit设置为off可能会增加发布端服务器上COMMIT的延迟。在这种情况下,将synchronous_commit设置为local或更高是有利的。 binary (boolean) 该参数指定是否需要该订阅对应的发布端以二进制格式发送数据,为true表示需要以二进制发送,为false表示不以二进制格式而知以默认的文本格式发送。默认值false。
  • 示例 --创建一个到远程服务器的订阅,复制发布mypublication和insert_only中的表,并在提交时立即开始复制。CREATE SUBSCRIPTION mysub CONNECTION 'host=192.168.1.50 port=5432 user=foo dbname=foodb password=xxxx' PUBLICATION mypublication, insert_only;--创建一个到远程服务器的订阅,复制insert_only发布中的表, 并且不开始复制直到稍后启用复制。CREATE SUBSCRIPTION mysub CONNECTION 'host=192.168.1.50 port=5432 user=foo dbname=foodb password=xxxx ' PUBLICATION insert_only WITH (enabled = false);--修改订阅的连接信息。ALTER SUBSCRIPTION mysub CONNECTION 'host=192.168.1.51 port=5432 user=foo dbname=foodb password=xxxx';--激活订阅。ALTER SUBSCRIPTION mysub SET(enabled=true);--删除订阅。DROP SUBSCRIPTION mysub;
  • 注意事项 定义同义词的用户成为其所有者。 若指定模式名称,则同义词在指定模式中创建。否则,在当前模式创建。 支持通过同义词访问的数据库对象包括:表、视图、函数和存储过程。 使用同义词时,用户需要具有对关联对象的相应权限。 支持使用同义词的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;
  • 参数说明 policy_name 行访问控制策略名称,同一个数据表上行访问控制策略名称不能相同。 table_name 行访问控制策略的表名。 PERMISSIVE | RESTRICTIVE PERMISSIVE指定行访问控制策略为宽容性策略,宽容性策略的条件用OR表达式拼接。 RESTRICTIVE指定行访问控制策略为限制性策略,限制性策略的条件用AND表达式拼接。拼接方式如下: (using_expression_permissive_1 OR using_expression_permissive_2 ...) AND (using_expression_restrictive_1 AND using_expression_restrictive_2 ...) 缺省值为PERMISSIVE。 command 当前行访问控制影响的SQL操作,可指定操作包括:ALL、SELECT、UPDATE、DELETE。当未指定时,ALL为默认值,涵盖SELECT、UPDATE、DELETE操作。 当command为SELECT时,SELECT类操作受行访问控制的影响,只能查看到满足条件(using_expression返回值为TRUE)的元组数据,受影响的操作包括SELECT,UPDATE ... RETURNING,DELETE ... RETURNING。 当command为UPDATE时,UPDATE类操作受行访问控制的影响,只能更新满足条件(using_expression返回值为TRUE)的元组数据,受影响的操作包括UPDATE, UPDATE ... RETURNING, SELECT ... FOR UPDATE/SHARE。 当command为DELETE时,DELETE类操作受行访问控制的影响,只能删除满足条件(using_expression返回值为TRUE)的元组数据,受影响的操作包括DELETE, DELETE ... RETURNING。 行访问控制策略与适配的SQL语法关系参加下表: 表1 ROW LEVEL SECURITY策略与适配SQL语法关系 Command SELECT/ALL policy UPDATE/ALL policy DELETE/ALL policy SELECT Existing row No No SELECT FOR UPDATE/SHARE Existing row Existing row No UPDATE No Existing row No UPDATE RETURNING Existing row Existing row No DELETE No No Existing row DELETE RETURNING Existing row No Existing row role_name 行访问控制影响的数据库用户。 当未指定时,PUBLIC为默认值,PUBLIC表示影响所有数据库用户,可以指定多个受影响的数据库用户。 系统管理员不受行访问控制特性影响。
  • 示例 --创建用户aliceopenGauss=# CREATE USER alice PASSWORD 'xxxxxxxxx';--创建用户bobopenGauss=# CREATE USER bob PASSWORD 'xxxxxxxxx';--创建数据表all_dataopenGauss=# CREATE TABLE public.all_data(id int, role varchar(100), data varchar(100));--向数据表插入数据openGauss=# INSERT INTO all_data VALUES(1, 'alice', 'alice data');openGauss=# INSERT INTO all_data VALUES(2, 'bob', 'bob data');openGauss=# INSERT INTO all_data VALUES(3, 'peter', 'peter data');--将表all_data的读取权限赋予alice和bob用户openGauss=# GRANT SELECT ON all_data TO alice, bob;--打开行访问控制策略开关openGauss=# ALTER TABLE all_data ENABLE ROW LEVEL SECURITY;--创建行访问控制策略,当前用户只能查看用户自身的数据openGauss=# CREATE ROW LEVEL SECURITY POLICY all_data_rls ON all_data USING(role = CURRENT_USER);--查看表all_data相关信息openGauss=# \d+ all_data Table "public.all_data" Column | Type | Modifiers | Storage | Stats target | Description--------+------------------------+-----------+----------+--------------+------------- id | integer | | plain | | role | character varying(100) | | extended | | data | character varying(100) | | extended | |Row Level Security Policies: POLICY "all_data_rls" USING (((role)::name = "current_user"()))Has OIDs: noOptions: orientation=row, compression=no, enable_rowsecurity=true--当前用户执行SELECT操作openGauss=# SELECT * FROM all_data; id | role | data----+-------+------------ 1 | alice | alice data 2 | bob | bob data 3 | peter | peter data(3 rows)openGauss=# EXPLAIN(COSTS OFF) SELECT * FROM all_data; QUERY PLAN---------------------- Seq Scan on all_data(1 row)--切换至alice用户执行SELECT操作openGauss=# SELECT * FROM all_data; id | role | data----+-------+------------ 1 | alice | alice data(1 row)openGauss=# EXPLAIN(COSTS OFF) SELECT * FROM all_data; QUERY PLAN---------------------------------------------------------------- Seq Scan on all_data Filter: ((role)::name = 'alice'::name) Notice: This query is influenced by row level security feature(3 rows)
  • 语法格式 CREATE [ ROW LEVEL SECURITY ] POLICY policy_name ON table_name [ AS { PERMISSIVE | RESTRICTIVE } ] [ FOR { ALL | SELECT | UPDATE | DELETE } ] [ TO { role_name | PUBLIC | CURRENT_USER | SESSION_USER } [, ...] ] USING ( using_expression )
  • 注意事项 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模式和用户模式下创建序列。
  • 语法格式 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;
  • 功能描述 对表创建行访问控制策略。 当对表创建了行访问控制策略,只有打开该表的行访问控制开关(ALTER TABLE ... ENABLE ROW LEVEL SECURITY),策略才能生效。否则不生效。 当前行访问控制影响数据表的读取操作(SELECT、UPDATE、DELETE),暂不影响数据表的写入操作(INSERT、MERGE INTO)。表所有者或系统管理员可以在USING子句中创建表达式,在客户端执行数据表读取操作时,数据库后台在查询重写阶段会将满足条件的表达式拼接并应用到执行计划中。针对数据表的每一条元组,当USING表达式返回TRUE时,元组对当前用户可见,当USING表达式返回FALSE或NULL时,元组对当前用户不可见。 行访问控制策略名称是针对表的,同一个数据表上不能有同名的行访问控制策略;对不同的数据表,可以有同名的行访问控制策略。 行访问控制策略可以应用到指定的操作(SELECT、UPDATE、DELETE、ALL),ALL表示会影响SELECT、UPDATE、DELETE三种操作;定义行访问控制策略时,若未指定受影响的相关操作,默认为ALL。 行访问控制策略可以应用到指定的用户(角色),也可应用到全部用户(PUBLIC);定义行访问控制策略时,若未指定受影响的用户,默认为PUBLIC。
  • 参数说明 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不应该从属于特定表。
  • 参数说明 server_name server的名称。 取值范围:长度必须小于等于63。 fdw_name 指定外部数据封装器的名称。 取值范围:dist_fdw,log_fdw,file_fdw。 OPTIONS ( { option_name ' value ' } [, ...] ) 这个子句为服务器指定选项。这些选项通常定义该服务器的连接细节,但是实际的名称和值取决于该服务器的外部数据包装器。 用于指定外部服务器的各类参数,详细的参数说明如下所示。 encrypt 是否对数据进行加密,该参数仅支持type为OBS时设置。默认值为on。 取值范围: on表示对数据进行加密,使用HTTPS协议通信。 off表示不对数据进行加密,使用HTTP协议通信。 access_key OBS访问协议对应的AK值(OBS云服务界面由用户获取),创建外表时AK值会加密保存到数据库的元数据表中。该参数仅支持type为OBS时设置。 secret_access_key OBS访问协议对应的SK值(OBS云服务界面由用户获取),创建外表时SK值会加密保存到数据库的元数据表中。该参数仅支持type为OBS时设置。 除了libpq支持的连接参数外,还额外提供以下参数: fdw_startup_cost 执行一个外表扫描时的启动耗时估算。这个值通常包含建立连接、远端对请求的分析和生成计划的耗时。默认值为100。 fdw_typle_cost 在远端服务器上对每一个元组进行扫描时的额外消耗。这个值通常表示数据在server间传输的额外消耗。默认值为0.01。
  • 示例 --创建一个角色,名为manager,密码为xxxxxxxxx。openGauss=# CREATE ROLE manager IDENTIFIED BY 'xxxxxxxxx';--创建一个角色,从2015年1月1日开始生效,到2026年1月1日失效。openGauss=# CREATE ROLE miriam WITH LOGIN PASSWORD 'xxxxxxxxx' VALID BEGIN '2015-01-01' VALID UNTIL '2026-01-01';--修改角色manager的密码为abcd@123。openGauss=# ALTER ROLE manager IDENTIFIED BY 'abcd@123' REPLACE 'xxxxxxxxx';--修改角色manager为系统管理员。openGauss=# ALTER ROLE manager SYSADMIN;--删除角色manager。openGauss=# DROP ROLE manager;--删除角色miriam。openGauss=# DROP ROLE miriam;
  • 语法格式 CREATE ROLE role_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' | USER GROUP 'groupuser' | PERM SPACE 'spacelimit' | TEMP SPACE 'tmpspacelimit' | SPILL SPACE 'spillspacelimit' | NODE GROUP logic_cluster_name | 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
  • 参数说明 schema_name 模式名称。 模式名不能和当前数据库里其他的模式重名。 模式的名称不可以“pg_”开头。 取值范围:字符串,要符合标识符的命名规范。 AUTHORIZATION user_name 指定模式的所有者。当不指定schema_name时,把user_name当作模式名,此时user_name只能是角色名。 取值范围:已存在的用户名/角色名。 WITH BLOCKCHAIN 指定模式的防篡改属性,防篡改模式下的行存普通用户表将自动扩展为防篡改用户表。 schema_element 在模式里创建对象的SQL语句。目前仅支持CREATE TABLE、CREATE VIEW、CREATE INDEX、CREATE PARTITION、CREATE SEQUENCE、CREATE TRIGGER、GRANT子句。 子命令所创建的对象都被AUTHORIZATION子句指定的用户所拥有。 如果当前搜索路径上的模式中存在同名对象时,需要明确指定引用对象所在的模式。可以通过命令SHOW SEARCH_PATH来查看当前搜索路径上的模式。
  • 示例 --创建一个角色role1。openGauss=# CREATE ROLE role1 IDENTIFIED BY 'xxxxxxxxx';-- 为用户role1创建一个同名schema,子命令创建的表films和winners的拥有者为role1。openGauss=# 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。openGauss=# DROP SCHEMA role1 CASCADE;--删除用户。openGauss=# DROP USER role1 CASCADE;
  • 示例 1 2 3 4 5 6 7 8 91011121314151617181920212223242526 --创建一个表tb_for_labelopenGauss=# CREATE TABLE tb_for_label(col1 text, col2 text, col3 text);--创建一个模式schema_for_labelopenGauss=# CREATE SCHEMA schema_for_label;--创建一个视图view_for_labelopenGauss=# CREATE VIEW view_for_label AS SELECT 1;--创建一个函数func_for_labelopenGauss=# CREATE FUNCTION func_for_label RETURNS TEXT AS $$ SELECT col1 FROM tb_for_label; $$ LANGUAGE SQL;--基于表创建资源标签openGauss=# CREATE RESOURCE LABEL IF NOT EXISTS table_label add TABLE(public.tb_for_label);--基于列创建资源标签openGauss=# CREATE RESOURCE LABEL IF NOT EXISTS column_label add COLUMN(public.tb_for_label.col1);--基于模式创建资源标签openGauss=# CREATE RESOURCE LABEL IF NOT EXISTS schema_label add SCHEMA(schema_for_label);--基于视图创建资源标签openGauss=# CREATE RESOURCE LABEL IF NOT EXISTS view_label add VIEW(view_for_label);--基于函数创建资源标签openGauss=# CREATE RESOURCE LABEL IF NOT EXISTS func_label add FUNCTION(func_for_label);
  • 参数说明 name 新发布的名称。 FOR TABLE 指定要添加到发布的表的列表。 只有持久基表才能成为发布的一部分,临时表、非日志表、外表、MOT表、物化视图、常规视图不能被发布。 FOR ALL TABLES 将发布标记为复制数据库中所有表的更改,包括在将来创建的表。 WITH ( publication_parameter [= value] [, ... ] ) 该子句指定发布的可选参数。支持下列参数: publish (string) 这个参数决定了哪些DML操作可以发布给订阅者。该值是一个用逗号分隔的操作列表,允许的操作是insert、update和delete,不指定则默认发布所有的动作。该选项的默认值是'insert, update, delete'。
共100000条