华为云用户手册

  • 示例 -- 创建角色。 gaussdb=# CREATE ROLE bob PASSWORD '********'; -- 创建外部服务器 gaussdb=# CREATE SERVER my_server FOREIGN DATA WRAPPER log_fdw; -- 创建USER MAPPING。 gaussdb=# CREATE USER MAPPING FOR bob SERVER my_server OPTIONS (user 'bob', password '********'); -- 修改USER MAPPING。 gaussdb=# ALTER USER MAPPING FOR bob SERVER my_server OPTIONS (SET password '********'); -- 删除USER MAPPING。 gaussdb=# DROP USER MAPPING FOR bob SERVER my_server; -- 删除外部服务器。 gaussdb=# DROP SERVER my_server; -- 删除角色。 gaussdb=# DROP ROLE bob;
  • 示例 --创建用户jim,登录密码为********。 gaussdb=# CREATE USER jim PASSWORD '********'; --下面语句与上面的等价。 gaussdb=# CREATE USER kim IDENTIFIED BY '********'; --如果创建有“创建数据库”权限的用户,则需要加CREATEDB关键字。 gaussdb=# CREATE USER dim CREATEDB PASSWORD '********'; --将用户jim的登录密码由********修改为**********。 gaussdb=# ALTER USER jim IDENTIFIED BY '**********' REPLACE '********'; --为用户jim追加CREATEROLE权限。 gaussdb=# ALTER USER jim CREATEROLE; --将enable_seqscan的值设置为on, 设置成功后,在下一会话中生效。 gaussdb=# ALTER USER jim SET enable_seqscan TO on; --重置jim的enable_seqscan参数。 gaussdb=# ALTER USER jim RESET enable_seqscan; --锁定jim账户。 gaussdb=# ALTER USER jim ACCOUNT LOCK; --删除用户。 gaussdb=# DROP USER kim CASCADE; gaussdb=# DROP USER jim CASCADE; gaussdb=# DROP USER dim CASCADE;
  • 常用方法 表1 PGReplicationConnection常用方法 返回值 方法 描述 throws void close() 结束逻辑复制,并释放资源。 SQLException void forceUpdateStatus() 强制将上次接收、刷新和应用的 LSN 状态发送到后端。 SQLException LogSequenceNumber getLastAppliedLSN() 获取上次主机日志回放的LSN。 - LogSequenceNumber getLastFlushedLSN() 获取上次主机刷新的LSN,即当前逻辑解码推进的LSN。 - LogSequenceNumber getLastReceiveLSN() 获取上次接收的LSN(针对LSN序复制槽)或CSN(针对CSN序复制槽)。 - boolean isClosed() 复制流是否关闭。 - ByteBuffer read() 从后端读取下一条WAL记录。如果读取不到,该方法阻塞I/O读。 SQLException ByteBuffer readPending() 从后端读取下一条WAL记录。如果读取不到,该方法不阻塞I/O读。 SQLException void setAppliedLSN(LogSequenceNumber applied) 设置应用的LSN。 - void setFlushedLSN(LogSequenceNumber flushed) 设置刷新的LSN(针对LSN序复制槽)或CSN(针对CSN序复制槽),在下次更新时发送至后端,用于推进服务端LSN(针对LSN序复制槽)或CSN(针对CSN序复制槽)。 -
  • 默认权限机制 数据库对象创建后,进行对象创建的用户就是该对象的所有者。数据库安装后默认情况下,未开启三权分立,数据库系统管理员具有与对象所有者相同的权限。也就是说对象创建后,默认只有对象所有者或者系统管理员可以查询、修改和销毁对象,以及通过GRANT将对象的权限授予其他用户。 为使其他用户能够使用对象,必须向用户或包含该用户的角色授予必要的权限。 GaussDB支持以下的权限:SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES、CREATE、CONNECT、EXECUTE、USAGE、ALTER、DROP、COMMENT、INDEX和VACUUM。不同的权限与不同的对象类型关联。有关各权限的详细信息,请参见GRANT。 要撤消已经授予的权限,可以使用REVOKE。对象所有者的权限(例如ALTER、DROP、COMMENT、INDEX、VACUUM、GRANT和REVOKE)是隐式拥有的,即只要拥有对象就可以执行对象所有者的这些隐式权限。对象所有者可以撤消自己的普通权限(SELECT、INSERT、UPDATE、DELETE),例如,使表对自己以及其他人只读,系统管理员用户除外。 系统表和系统视图要么只对系统管理员可见,要么对所有用户可见。标识了需要系统管理员权限的系统表和视图只有系统管理员可以查询。有关信息,请参考系统表和系统视图。 数据库提供对象隔离的特性,对象隔离特性开启时,用户只能查看有权限访问的对象(表、视图、字段、函数),系统管理员不受影响。有关信息,请参考ALTER DATABASE。 不建议用户修改系统表和系统视图的权限。 父主题: 用户及权限
  • 示例 --创建jim和tom用户。 gaussdb=# CREATE USER jim PASSWORD '********'; gaussdb=# CREATE USER tom PASSWORD '********'; --创建一个GBK编码的数据库music(本地环境的编码格式必须也为GBK)。 gaussdb=# CREATE DATABASE music ENCODING 'GBK' template = template0; --创建数据库music2,并指定所有者为jim。 gaussdb=# CREATE DATABASE music2 OWNER jim; --用模板template0创建数据库music3,并指定所有者为jim。 gaussdb=# CREATE DATABASE music3 OWNER jim TEMPLATE template0; --设置music数据库的连接数为10。 gaussdb=# ALTER DATABASE music CONNECTION LIMIT= 10; --将music名称改为music4。 gaussdb=# ALTER DATABASE music RENAME TO music4; --将数据库music2的所属者改为tom。 gaussdb=# ALTER DATABASE music2 OWNER TO tom; --设置music3的表空间为PG_DEFAULT。 gaussdb=# ALTER DATABASE music3 SET TABLESPACE PG_DEFAULT; --关闭在数据库music3上缺省的索引扫描。 gaussdb=# ALTER DATABASE music3 SET enable_indexscan TO off; --重置enable_indexscan参数。 gaussdb=# ALTER DATABASE music3 RESET enable_indexscan; --删除数据库。 gaussdb=# DROP DATABASE music2; gaussdb=# DROP DATABASE music3; gaussdb=# DROP DATABASE music4; --删除jim和tom用户。 gaussdb=# DROP USER jim; gaussdb=# DROP USER tom; --创建兼容TD格式的数据库。 gaussdb=# CREATE DATABASE td_compatible_db DBCOMPATIBILITY 'C'; --创建兼容A格式的数据库。 gaussdb=# CREATE DATABASE ora_compatible_db DBCOMPATIBILITY 'A'; --删除兼容TD、A格式的数据库。 gaussdb=# DROP DATABASE td_compatible_db; gaussdb=# DROP DATABASE ora_compatible_db;
  • 示例 CREATE TABLE houses ( id INTEGER, tax INTEGER, bedroom INTEGER, bath DOUBLE PRECISION, price INTEGER, size INTEGER, lot INTEGER, mark text ); insert into houses(id, tax, bedroom, bath, price, size, lot, mark) VALUES (1,590,2,1,50000,770,22100,'a+'), (2,1050,3,2,85000,1410,12000,'a+'), (3,20,2,1,22500,1060,3500,'a-'), (4,870,2,2,90000,1300,17500,'a+'), (5,1320,3,2,133000,1500,30000,'a+'), (6,1350,2,1,90500,850,25700,'a-'), (7,2790,3,2.5,260000,2130,25000,'a+'), (8,680,2,1,142500,1170,22000,'a-'), (9,1840,3,2,160000,1500,19000,'a+'), (10,3680,4,2,240000,2790,20000,'a-'), (11,1660,3,1,87000,1030,17500,'a+'), (12,1620,3,2,118500,1250,20000,'a-'), (13,3100,3,2,140000,1760,38000,'a+'), (14,2090,2,3,148000,1550,14000,'a-'), (15,650,3,1.5,65000,1450,12000,'a-'); CREATE MODEL price_model USING logistic_regression FEATURES size, lot TARGET mark FROM HOUSES WITH learning_rate=0.88, max_iterations=default;
  • 示例 --创建SCHEMA。 gaussdb=# CREATE SCHEMA tpcds; --创建表tpcds.reason。 gaussdb=# CREATE TABLE tpcds.reason ( r_reason_sk integer, r_reason_id character(16), r_reason_desc character(100) ); --向表中插入多条记录。 gaussdb=# INSERT INTO tpcds.reason values(1,'AAAAAAAABAAAAAAA','reason 1'),(2,'AAAAAAAABAAAAAAA','reason 2'); --在表tpcds.reason上创建索引。 gaussdb=# CREATE UNIQUE INDEX ds_reason_index1 ON tpcds.reason(r_reason_sk); --对带索引的表tpcds.reason执行VACUUM操作。 gaussdb=# VACUUM (VERBOSE, ANALYZE) tpcds.reason; --删除索引。 gaussdb=# DROP INDEX ds_reason_index1 CASCADE; gaussdb=# DROP TABLE tpcds.reason; gaussdb=# DROP SCHEMA tpcds CASCADE;
  • 参数说明 FULL 选择“FULL”清理,这样可以恢复更多的空间,但是需要耗时更多,并且在表上施加了排他锁。 使用FULL参数会导致统计信息丢失,如果需要收集统计信息,请在VACUUM FULL语句中加上analyze关键字。 FREEZE 指定FREEZE相当于执行VACUUM时将vacuum_freeze_min_age参数设为0。 VERBOSE 为每个表打印一份详细的清理工作报告。 ANALYZE | ANALYSE 更新用于优化器的统计信息,以决定执行查询的最有效方法。 ustore分区表在autovacuum=analyze的时候也会触发vacuum。 table_name 要清理的表的名称(可以有模式修饰)。 取值范围:要清理的表的名称。缺省时为当前数据库中的所有表。 column_name 要分析的具体的字段名称,需要配合analyze选项使用。 取值范围:要分析的具体的字段名称。缺省时为所有字段。 由于vacuum analyze语句的机制是依次执行vacuum和analyze,因此当column_name错误时存在vacuum执行成功但analyze执行失败的情况,对于分区表,则会出现对某个分区成功vacuum之后analyze失败的情况。 PARTITION COMPACT和PARTITION参数不能同时使用。 partition_name 要清理的表的一级分区名称。缺省时为所有一级分区。 subpartition_name 要清理的表的二级分区名称。缺省时为所有二级分区。 DELTAMERGE 只针对列存表,将列存表的delta table中的数据转移到主表存储上。对列存表而言,此操作受GUC参数enable_delta_store和参数说明中的deltarow_threshold控制。
  • 语法格式 回收空间并更新统计信息,对关键字顺序无要求。 VACUUM [ ( { FULL | FREEZE | VERBOSE | {ANALYZE | ANALYSE }} [,...] ) ] [ table_name [ (column_name [, ...] ) ] [ PARTITION ( partition_name ) | SUBPARTITION ( subpartition_name ) ] ]; 仅回收空间,不更新统计信息。 VACUUM [ FULL [COMPACT] ] [ FREEZE ] [ VERBOSE ] [ table_name [ PARTITION ( partition_name ) | SUBPARTITION ( subpartition_name ) ] ]; 回收空间并更新统计信息,且对关键字顺序有要求。 VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] { ANALYZE | ANALYSE } [ VERBOSE ] [ table_name [ (column_name [, ...] ) ] ] [ PARTITION ( partition_name ) ];
  • 语法格式 格式一:START TRANSACTION格式 START TRANSACTION [ { ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE | REPEATABLE READ } | { READ WRITE | READ ONLY } } [...] ]; 格式二:BEGIN格式 BEGIN [ WORK | TRANSACTION ] [ { ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE | REPEATABLE READ } | { READ WRITE | READ ONLY } } [...] ];
  • 示例 --创建SCHEMA。 gaussdb=# CREATE SCHEMA tpcds; --创建表tpcds.reason。 gaussdb=# CREATE TABLE tpcds.reason (c1 int, c2 int); --以默认方式启动事务。 gaussdb=# START TRANSACTION; gaussdb=# SELECT * FROM tpcds.reason; gaussdb=# END; --以默认方式启动事务。 gaussdb=# BEGIN; gaussdb=# SELECT * FROM tpcds.reason; gaussdb=# END; --以隔离级别为READ COMMITTED,读/写方式启动事务。 gaussdb=# START TRANSACTION ISOLATION LEVEL READ COMMITTED READ WRITE; gaussdb=# SELECT * FROM tpcds.reason; gaussdb=# COMMIT; --删除表tpcds.reason。 gaussdb=# DROP TABLE tpcds.reason; --删除SCHEMA。 gaussdb=# DROP SCHEMA tpcds;
  • 参数说明 WORK | TRANSACTION BEGIN格式中的可选关键字,没有实际作用。 ISOLATION LEVEL 指定事务隔离级别,它决定当一个事务中存在其他并发运行事务时它能够看到什么数据。 在事务中第一个数据修改语句(SELECT, INSERT,DELETE,UPDATE,FETCH,COPY)执行之后,事务隔离级别就不能再次设置。 取值范围: READ COMMITTED:读已提交隔离级别,只能读到已经提交的数据,而不会读到未提交的数据。这是缺省值。 REPEATABLE READ: 可重复读隔离级别,仅仅看到事务开始之前提交的数据,它不能看到未提交的数据,以及在事务执行期间由其它并发事务提交的修改。 SERIALIZABLE:GaussDB目前功能上不支持此隔离级别,等价于REPEATABLE READ。 READ WRITE | READ ONLY 指定事务访问模式(读/写或者只读)。
  • V_SESSION V_SESSION视图描述当前所有的会话信息,该视图只有系统管理员可以访问,普通用户需要授权才能访问,该视图同时存在于pg_catalog和sys两种schema下。 表1 V_SESSION字段 名称 类型 描述 saddr raw 暂不支持,置NULL。 sid bigint 会话ID。 serial# integer 当前活动的后台线程的序号,在GaussDB中为0。 audsid numeric 暂不支持,置NULL。 paddr raw 暂不支持,置NULL。 schema# numeric 暂不支持,置NULL。 schemaname name 登录该后台的用户名。 user# oid 登录此后台线程的用户的OID。oid 为0表示此后台线程为全局辅助线程(auxiliary)。 username name 登录此后台线程的用户名。username为空表示此后台线程为全局辅助线程(auxiliary)。 command numeric 暂不支持,置NULL。 ownerid numeric 暂不支持,置NULL。 taddr character varying(16) 暂不支持,置NULL。 lockwait character varying(16) 暂不支持,置NULL。 machine text 客户端的主机名,这个字段是通过client_addr的反向DNS查找得到。这个字段只有在启动log_hostname且使用IP连接时才非空。 sql_id bigint 查询语句的ID。 client_info text 客户端信息。 event text 语句当前排队状态。可能值是: ● waiting in queue:表示语句在排队中。 ● 空:表示语句正在运行。 sql_exec_start timestamp with time zone 开始当前活跃查询的时间, 如果state的值不是active,则这个值是上一个查询的开始时间。 program text 连接到该后台的应用名。 status text 该后台当前总体状态。可能值是: ● active:后台正在执行一个查询。 ● idle:后台正在等待一个新的客户端命令。 ● idle in transaction:后台在事务中,但事务中没有语句在执行。 ● idle in transaction (aborted):后台在事务中,但事务中有语句执行失败。 ● fastpath function call:后台正在执行一个fast-path函数。 ● disabled:如果后台禁用track_activities,则报告这个状态。 server character varying(9) 暂不支持,置NULL。 pdml_status character varying(8) 当前会话是否启用DML的并行执行。 port numeric 当前会话的端口号。 process character varying(24) 当前会话的进程号。 logon_time timestamp(0) without time zone 当前会话的登入时间。 last_call_et integer 当前会话上次状态发生改变的时长。 osuser character varying(128) 暂不支持,置NULL。 terminal character varying(30) 暂不支持,置NULL。 type character varying(10) 暂不支持,置NULL。 sql_address raw 暂不支持,置NULL。 sql_hash_value numeric 暂不支持,置NULL。 sql_child_number numeric 暂不支持,置NULL。 sql_exec_id numeric 暂不支持,置NULL。 prev_sql_addr raw 暂不支持,置NULL。 prev_hash_value numeric 暂不支持,置NULL。 prev_sql_id character varying(13) 暂不支持,置NULL。 prev_child_number numeric 暂不支持,置NULL。 prev_exec_start timestamp(0) without time zone 暂不支持,置NULL。 prev_exec_id numeric 暂不支持,置NULL。 plsql_entry_object_id numeric 暂不支持,置NULL。 plsql_entry_subprogram_id numeric 暂不支持,置NULL。 plsql_object_id numeric 暂不支持,置NULL。 plsql_subprogram_id numeric 暂不支持,置NULL。 module character varying(64) 暂不支持,置NULL。 module_hash numeric 暂不支持,置NULL。 action character varying(64) 暂不支持,置NULL。 action_hash numeric 暂不支持,置NULL。 fixed_table_sequence numeric 暂不支持,置NULL。 row_wait_obj# numeric 暂不支持,置NULL。 row_wait_file# numeric 暂不支持,置NULL。 row_wait_block# numeric 暂不支持,置NULL。 row_wait_row# numeric 暂不支持,置NULL。 top_level_call# numeric 暂不支持,置NULL。 pdml_enabled character varying(3) 暂不支持,置NULL。 failover_type character varying(13) 暂不支持,置NULL。 failover_method character varying(10) 暂不支持,置NULL。 failed_over character varying(3) 暂不支持,置NULL。 resource_consumer_group character varying(32) 暂不支持,置NULL。 pddl_status character varying(8) 暂不支持,置NULL。 pq_status character varying(8) 暂不支持,置NULL。 current_queue_duration numeric 暂不支持,置NULL。 client_identifier character varying(64) 暂不支持,置NULL。 blocking_session_status character varying(11) 暂不支持,置NULL。 blocking_instance numeric 暂不支持,置NULL。 blocking_session numeric 暂不支持,置NULL。 final_blocking_session_status character varying(11) 暂不支持,置NULL。 final_blocking_instance numeric 暂不支持,置NULL。 final_blocking_session numeric 暂不支持,置NULL。 seq# numeric 暂不支持,置NULL。 event# numeric 暂不支持,置NULL。 p1text character varying(64) 暂不支持,置NULL。 p1 numeric 暂不支持,置NULL。 p1raw raw 暂不支持,置NULL。 p2text character varying(64) 暂不支持,置NULL。 p2 numeric 暂不支持,置NULL。 p2raw raw 暂不支持,置NULL。 p3text character varying(64) 暂不支持,置NULL。 p3 numeric 暂不支持,置NULL。 p3raw raw 暂不支持,置NULL。 wait_class_id numeric 暂不支持,置NULL。 wait_class# numeric 暂不支持,置NULL。 wait_class character varying(64) 暂不支持,置NULL。 wait_time numeric 暂不支持,置NULL。 seconds_in_wait numeric 暂不支持,置NULL。 state character varying(19) 暂不支持,置NULL。 wait_time_micro numeric 暂不支持,置NULL。 time_remaining_micro numeric 暂不支持,置NULL。 time_since_last_wait_micro numeric 暂不支持,置NULL。 service_name character varying(64) 暂不支持,置NULL。 sql_trace character varying(8) 暂不支持,置NULL。 sql_trace_waits character varying(5) 暂不支持,置NULL。 sql_trace_binds character varying(5) 暂不支持,置NULL。 sql_trace_plan_stats character varying(10) 暂不支持,置NULL。 session_edition_id numeric 暂不支持,置NULL。 creator_addr raw 暂不支持,置NULL。 creator_serial# numeric 暂不支持,置NULL。 ecid character varying(64) 暂不支持,置NULL。 sql_translation_profile_id numeric 暂不支持,置NULL。 pga_tunable_mem numeric 暂不支持,置NULL。 shard_ddl_status character varying(8) 暂不支持,置NULL。 con_id numeric 暂不支持,置NULL。 external_name character varying(1024) 暂不支持,置NULL。 plsql_debugger_connected character varying(5) 暂不支持,置NULL。 父主题: 系统视图
  • 修改约束示例 为列添加非空约束 --建表。 gaussdb=# CREATE TABLE test_alt3(pid INT, areaid CHAR(5), name VARCHAR(20)); --为pid添加非空约束。 gaussdb=# ALTER TABLE test_alt3 MODIFY pid NOT NULL; --查看。 gaussdb=# \d test_alt3 Table "public.test_alt3" Column | Type | Modifiers --------+-----------------------+----------- pid | integer | not null areaid | character(5) | name | character varying(20) | 取消列的非空约束 gaussdb=# ALTER TABLE test_alt3 MODIFY pid NULL; --查看。 gaussdb=# \d test_alt3 Table "public.test_alt3" Column | Type | Modifiers --------+-----------------------+----------- pid | integer | areaid | character(5) | name | character varying(20) | 修改字段默认值 --修改test_alt1表中id的默认值。 gaussdb=# ALTER TABLE test_alt3 ALTER COLUMN areaid SET DEFAULT '00000'; --查看。 gaussdb=# \d test_alt3 Table "public.test_alt3" Column | Type | Modifiers --------+-----------------------+------------------------- pid | integer | areaid | character(5) | default '00000'::bpchar name | character varying(20) | --删除id的默认值。 gaussdb=# ALTER TABLE test_alt3 ALTER COLUMN areaid DROP DEFAULT; --查看。 gaussdb=# \d test_alt3 Table "public.test_alt3" Column | Type | Modifiers --------+-----------------------+----------- pid | integer | areaid | character(5) | name | character varying(20) | 添加表级约束 直接添加约束 --给表添加主键约束。 gaussdb=# ALTER TABLE test_alt3 ADD CONSTRAINT pk_test3_pid PRIMARY KEY (pid); --查看。 gaussdb=# \d test_alt3 Table "public.test_alt3" Column | Type | Modifiers --------+-----------------------+----------- pid | integer | not null areaid | integer | name | character varying(20) | Indexes: "pk_test3_pid" PRIMARY KEY, btree (pid) TABLESPACE pg_default 先创建索引然后再添加约束 --建表 gaussdb=# CREATE TABLE test_alt4(c1 INT, c2 INT); --建索引。 gaussdb=# CREATE UNIQUE INDEX pk_test4_c1 ON test_alt4(c1); --添加约束时关联已经创建的索引。 gaussdb=# ALTER TABLE test_alt4 ADD CONSTRAINT pk_test4_c1 PRIMARY KEY USING INDEX pk_test4_c1; --查看。 gaussdb=# \d test_alt4 Table "public.test_alt4" Column | Type | Modifiers --------+---------+----------- c1 | integer | not null c2 | integer | Indexes: "pk_test4_c1" PRIMARY KEY, btree (c1) TABLESPACE pg_default --删除。 gaussdb=# DROP TABLE test_alt4; 删除表级约束 --删除约束。 gaussdb=# ALTER TABLE test_alt3 DROP CONSTRAINT IF EXISTS pk_test3_pid; --查看。 gaussdb=# \d test_alt3 Table "public.test_alt3" Column | Type | Modifiers --------+-----------------------+----------- pid | integer | not null areaid | integer | name | character varying(20) | --删除。 gaussdb=# DROP TABLE test_alt3;
  • 示例 --创建表。 gaussdb=# CREATE TABLE my_table (c1 int, c2 int) WITH(STORAGE_TYPE=ASTORE); --创建全量物化视图。 gaussdb=# CREATE MATERIALIZED VIEW foo AS SELECT * FROM my_table; --把物化视图foo重命名为bar。 gaussdb=# ALTER MATERIALIZED VIEW foo RENAME TO bar; --删除全量物化视图。 gaussdb=# DROP MATERIALIZED VIEW bar; --删除表my_table。 gaussdb=# DROP TABLE my_table;
  • 参数说明 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 参数值。如果不是简单的标识符或数字,则参数值必须加单引号(标示符和数字同样可以加上单引号)。
  • 参数说明 src_name 待删除的Data Source对象名称。 取值范围:字符串,符合标识符命名规范。 IF EXISTS 如果指定的Data Source不存在,则发出一个notice而不是报错。 CASCADE | RESTRICT CASCADE:表示允许级联删除依赖于Data Source的对象 RESTRICT(缺省值):表示有依赖于该Data Source的对象存在,则该Data Source无法删除。 目前Data Source对象没有被依赖的对象,CASCADE和RESTRICT效果一样,保留此选项是为了向后兼容性。
  • 示例 --创建表student1。 gaussdb=# CREATE TABLE student1 ( stuno int, classno int ); --插入数据。 gaussdb=# INSERT INTO student1 VALUES(1,1); gaussdb=# INSERT INTO student1 VALUES(2,2); gaussdb=# INSERT INTO student1 VALUES(3,3); --查看数据。 gaussdb=# SELECT * FROM student1; --直接更新所有记录的值。 gaussdb=# UPDATE student1 SET classno = classno*2; --查看数据。 gaussdb=# SELECT * FROM student1; --删除表。 gaussdb=# DROP TABLE student1; --WHERE CURRENT OF cursor_name用例 gaussdb=# create table t1(c1 int, c2 varchar2) with (storage_type = 'ustore', fillfactor=100); -- 创建表 gaussdb=# insert into t1 values(generate_series(1,1000),'abcd'); -- 插入数据 gaussdb=# declare gaussdb-# cursor cur1 is select * from t1 where c1 = 1 for update; gaussdb-# va t1%rowtype; gaussdb-# begin gaussdb$# open cur1; gaussdb$# fetch cur1 into va; gaussdb$# update t1 set c2 = c2 || c2 where current of cur1; -- 使用WHERE CURRENT OF cursor_name更新数据 gaussdb$# close cur1; gaussdb$# commit; gaussdb$# end; gaussdb$# / gaussdb=# select * from t1 where c1 = 1; -- 查询数据 gaussdb=# drop table t1; --删除表
  • 语法格式 单表更新: [ WITH [ RECURSIVE ] with_query [, ...] ] UPDATE [/*+ plan_hint */] [ ONLY ] table_name [ partition_clause ] [ * ] [ [ AS ] alias ] SET {column_name = { expression | DEFAULT } |( column_name [, ...] ) = {( { expression | DEFAULT } [, ...] ) |sub_query }}[, ...] [ FROM from_list] [ WHERE condition | WHERE CURRENT OF cursor_name ] [ ORDER BY {expression [ [ ASC | DESC | USING operator ] [ LIMIT { count } ] [ RETURNING {* | {output_expression [ [ AS ] output_name ]} [, ...] }]; 多表更新: [ WITH [ RECURSIVE ] with_query [, ...] ] UPDATE [/*+ plan_hint */] table_list SET {column_name = { expression | DEFAULT } |( column_name [, ...] ) = {( { expression | DEFAULT } [, ...] ) |sub_query }}[, ...] [ FROM from_list] [ WHERE condition ]; where sub_query can be: SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] { * | {expression [ [ AS ] output_name ]} [, ...] } [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY grouping_element [, ...] ] [ HAVING condition [, ...] ] [ ORDER BY {expression [ [ ASC | DESC | USING operator ] | nlssort_expression_clause ] [ NULLS { FIRST | LAST } ]} [, ...] ] [ LIMIT { [offset,] count | ALL } ]
  • 参数说明 WITH [ RECURSIVE ] with_query [, ...] 用于声明一个或多个可以在主查询中通过名称引用的子查询,相当于临时表。这种子查询语句结构称为CTE(Common Table Expression)结构,应用这种结构时,执行计划中将存在CTE SCAN的内容。 如果声明了RECURSIVE,那么允许SELECT子查询通过名称引用它自己。 其中with_query的详细格式为:with_query_name [ ( column_name [, ...] ) ] AS [ [ NOT ] MATERIALIZED ] ( {select | values | insert | update | delete} ) with_query_name指定子查询生成的结果集名称,在查询中可使用该名称访问子查询的结果集。 column_name指定子查询结果集中显示的列名。 每个子查询可以是SELECT,VALUES,INSERT,UPDATE或DELETE语句。 用户可以使用MATERIALIZED / NOT MATERIALIZED对CTE进行修饰。 如果声明为MATERIALIZED,WITH查询将被物化,生成一个子查询结果集的拷贝,在引用处直接查询该拷贝,因此WITH子查询无法和主干SELECT语句进行联合优化(如谓词下推、等价类传递等),对于此类场景可以使用NOT MATERIALIZED进行修饰,如果WITH查询语义上可以作为子查询内联执行,则可以进行上述优化。 如果用户没有显示声明物化属性则遵守以下规则:如果CTE只在所属SELECT主干中被引用一次,且语义上支持内联执行,则会被改写为子查询内联执行,否则以CTE Scan的方式物化执行。 plan_hint子句 以/*+ */的形式在UPDATE关键字后,用于对UPDATE对应的语句块生成的计划进行hint调优,详细用法请参见章节使用Plan Hint进行调优。每条语句中只有第一个/*+ plan_hint */注释块会作为hint生效,里面可以写多条hint。 table_name 要更新的表名,可以使用模式修饰。 取值范围:已存在的表名称。 支持使用DATABASE LINK方式对远端表进行操作,使用方式详情请见DATABASE LINK。 partition_clause 指定分区更新操作 PARTITION { ( partition_name ) | FOR ( partition_value [, ...] ) } | SUBPARTITION { ( subpartition_name ) | FOR ( subpartition_value [, ...] ) } 关键字详见SELECT一节介绍 示例详见CREATE TABLE SUBPARTITION alias 目标表的别名。 取值范围:字符串,符合标识符命名规范。 table_list 一个表的表达式列表,与from_list类似,但可以同时声明目标表和关联表,仅在多表更新语法中使用。 column_name 要修改的字段名。 支持使用目标表的别名加字段名来引用这个字段。例如: UPDATE foo AS f SET f.col_name = 'namecol'; 取值范围:已存在的字段名。 expression 赋给字段的值或表达式。 DEFAULT 用对应字段的缺省值填充该字段。 如果没有缺省值,则为NULL。 sub_query 子查询。 使用同一数据库里其他表的信息来更新一个表可以使用子查询的方法。其中SELECT子句具体介绍请参考SELECT。 在update单列时,支持使用order by子句与limit子句;而在update多列时,则不支持使用order by子句与limit子句。 from_list 一个表的表达式列表,允许在WHERE条件里使用其他表的字段。与在一个SELECT语句的FROM子句里声明表列表类似。 目标表绝对不能出现在from_list里,除非在使用一个自连接(此时它必须以from_list的别名出现)。 condition 一个返回Boolean类型结果的表达式。只有这个表达式返回true的行才会被更新。不建议使用int等数值类型作为condition,因为int等数值类型可以隐式转换为bool值(非0值隐式转换为true,0转换为false),可能导致非预期的结果。 WHERE CURRENT OF cursor_name 当cursor指向表的某一行时,可以使用此语法更新cursor当前指向的行。 cursor_name:指定游标的名称。 B兼容模式的数据库不支持使用此语法。 此语法仅支持普通表,不支持分区表,不支持列存。 仅支持在存储过程中使用。 不支持与其他WHERE条件组合使用。 不支持多表更新。 不支持与WITH、USING、ORDER BY、FROM组合使用。 cursor对应的SELECT语句必须声明为FOR UPDATE。 cursor对应的SELECT语句仅支持单表,不支持LIMIT/OFFSET,不支持带有子查询、子链接。 存储过程中声明为FOR UPDATE的cursor,在commit/rollback后,将无法再次使用。 若cursor指向的行已经不存在,在A兼容性模式下将报错指定的行不存在(仅UPDATE时报错,DELETE不报错),其他兼容模式下不报错。 ORDER BY子句 关键字详见SELECT章节介绍。 LIMIT子句 关键字详见SELECT章节介绍。 output_expression 在所有需要更新的行都被更新之后,UPDATE命令用于计算返回值的表达式。 取值范围:使用任何table以及FROM中列出的表的字段。*表示返回所有字段。 output_name 字段的返回名称。
  • 参数说明 client_master_key_name 该参数作为密钥对象名,在同一命名空间下,需满足命名唯一性约束。 取值范围:字符串,需符合标识符命名规范。 KEY_STORE 外部密钥管理者。取值见表1。 KEY_PATH 由外部密钥管理者管理某个的密钥,不同密钥管理者格式不同。取值为字符串,详见表1。字符串由单引号或双引号包含,如果字符串长度超过64,则只能使用单引号包含。 ALGORITHM 密钥用于何种加密算法。取值见表1。 表1 针对不同密钥管理者的参数值 KEY_STORE KEY_PATH ALGORITHM huawei_kms 格式:‘{KmsApiUrl}/{密钥ID}' 参考:'https://kms.{项目}.myhuaweicloud.com/v1.0/{项目ID}/kms/{密钥ID}' 示例:'https://kms.cn-north-4.myhuaweicloud.com/v1.0/00000000000000000000000000000000/kms/00000000-0000-0000-0000-000000000000' AES_256 gs_ktool 格式:"gs_ktool/{密钥ID}" 示例:"gs_ktool/1" AES_256_CBC AES_256_GCM SM4
  • 示例(在使用gsql连接数据库服务器的场景下) # 1 解压xxx-gsql-xxx安装包,找到脚本gsql_env.sh # 2 通过脚本,自动配置环境变量GS_KTOOL_FILE_PATH source gsql_env.sh # 3 创建密钥,返回密钥ID,密钥ID为1 gs_ktool -g # 4 连接数据库,使用特权账号,创建新用户 alice gsql -p 端口号 -d postgres -r gaussdb=# CREATE USER alice PASSWORD '*******'; gaussdb=# \q # 5 连接数据库,务必使用 -C 参数 gsql -p 端口号 -d postgres -U alice -r -C gaussdb=# -- 6 创建主密钥 gaussdb=# CREATE CLIENT MASTER KEY alice_cmk WITH ( KEY_STORE = gs_ktool , KEY_PATH = "gs_ktool/1" , ALGORITHM = AES_256_CBC);
  • 示例 -- 创建目标表products和源表newproducts,并插入数据 gaussdb=# CREATE TABLE products ( product_id INTEGER, product_name VARCHAR2(60), category VARCHAR2(60) ); gaussdb=# INSERT INTO products VALUES (1501, 'vivitar 35mm', 'electrncs'); gaussdb=# INSERT INTO products VALUES (1502, 'olympus is50', 'electrncs'); gaussdb=# INSERT INTO products VALUES (1600, 'play gym', 'toys'); gaussdb=# INSERT INTO products VALUES (1601, 'lamaze', 'toys'); gaussdb=# INSERT INTO products VALUES (1666, 'harry potter', 'dvd'); gaussdb=# CREATE TABLE newproducts ( product_id INTEGER, product_name VARCHAR2(60), category VARCHAR2(60) ); gaussdb=# INSERT INTO newproducts VALUES (1502, 'olympus camera', 'electrncs'); gaussdb=# INSERT INTO newproducts VALUES (1601, 'lamaze', 'toys'); gaussdb=# INSERT INTO newproducts VALUES (1666, 'harry potter', 'toys'); gaussdb=# INSERT INTO newproducts VALUES (1700, 'wait interface', 'books'); -- 进行MERGE INTO操作 gaussdb=# MERGE INTO products p USING newproducts np ON (p.product_id = np.product_id) WHEN MATCHED THEN UPDATE SET p.product_name = np.product_name, p.category = np.category WHERE p.product_name != 'play gym' WHEN NOT MATCHED THEN INSERT VALUES (np.product_id, np.product_name, np.category) WHERE np.category = 'books'; MERGE 4 -- 查询更新后的结果 gaussdb=# SELECT * FROM products ORDER BY product_id; product_id | product_name | category ------------+----------------+----------- 1501 | vivitar 35mm | electrncs 1502 | olympus camera | electrncs 1600 | play gym | toys 1601 | lamaze | toys 1666 | harry potter | toys 1700 | wait interface | books (6 rows) -- 删除表 gaussdb=# DROP TABLE products; gaussdb=# DROP TABLE newproducts;
  • 参数说明 IF EXISTS 使用这个选项,如果视图不存在时不会产生错误,仅有会有一个提示信息。 view_name 视图名称,可以用模式修饰。 取值范围:字符串,符合标识符命名规范。 column_name 可选的名称列表,视图的字段名。如果没有给出,字段名取自查询中的字段名。 取值范围:字符串,符合标识符命名规范。 SET/DROP DEFAULT 设置或删除一个列的缺省值,该参数暂无实际意义。 new_owner 视图新所有者的用户名称。 new_name 视图的新名称。 new_schema 视图的新模式。 view_option_name [ = view_option_value ] 该子句为视图指定一个可选的参数。 目前view_option_name支持的参数仅有security_barrier,当VIEW试图提供行级安全时,应使用该参数。 取值范围:Boolean类型,TRUE、FALSE。
  • 语法格式 更改操作符的所有者。 ALTER OPERATOR name ( { left_type | NONE } , { right_type | NONE } ) OWNER TO new_owner; 更改操作符的模式。 ALTER OPERATOR name ( { left_type | NONE } , { right_type | NONE } ) SET SCHEMA new_schema;
  • 语法格式 修改角色的权限。 ALTER ROLE role_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} | {INDEPENDENT | NOINDEPENDENT} | {VCADMIN | NOVCADMIN} | {PERSISTENCE | NOPERSISTENCE} | CONNECTION LIMIT connlimit | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password' [EXPIRED] | [ ENCRYPTED | UNENCRYPTED ] IDENTIFIED BY 'password' [ REPLACE 'old_password' | EXPIRED ] | [ ENCRYPTED | UNENCRYPTED ] PASSWORD { 'password' | DISABLE | EXPIRED } | [ ENCRYPTED | UNENCRYPTED ] IDENTIFIED BY { 'password' [ REPLACE 'old_password' ] | DISABLE } | VALID BEGIN 'timestamp' | VALID UNTIL 'timestamp' | RESOURCE POOL 'respool' | PERM SPACE 'spacelimit' | PGUSER 修改角色的名称。 ALTER ROLE role_name RENAME TO new_name; 锁定或解锁。 ALTER ROLE role_name ACCOUNT { LOCK | UNLOCK }; 设置角色的配置参数。 ALTER ROLE role_name [ IN DATABASE database_name ] SET configuration_parameter {{ TO | = } { value | DEFAULT } | FROM CURRENT}; 重置角色的配置参数。 ALTER ROLE role_name [ IN DATABASE database_name ] RESET {configuration_parameter|ALL};
  • 参数说明 role_name 现有角色名。 取值范围:已存在的用户名。 IN DATABASE database_name 表示修改角色在指定数据库上的参数。 SET configuration_parameter 设置角色的参数。ALTER ROLE中修改的会话参数只针对指定的角色,且在下一次该角色启动的会话中有效。 取值范围: configuration_parameter和value的取值请参见SET。 DEFAULT:表示清除configuration_parameter参数的值,configuration_parameter参数的值将继承本角色新产生的SESSION的默认值。 FROM CURRENT:取当前会话中的值设置为configuration_parameter参数的值。 RESET configuration_parameter/ALL 清除configuration_parameter参数的值。与SET configuration_parameter TO DEFAULT的效果相同。 取值范围:ALL表示清除所有参数的值。 ACCOUNT LOCK | ACCOUNT UNLOCK ACCOUNT LOCK:锁定账户,禁止登录数据库。 ACCOUNT UNLOCK:解锁账户,允许登录数据库。 PGUSER 当前版本不允许修改角色的PGUSER属性 PASSWORD/IDENTIFIED BY 'password' 重置或修改用户密码。除了初始用户外其他管理员或普通用户修改自己的密码需要输入正确的旧密码。只有初始用户、系统管理员(sysadmin)或拥有创建用户(CREATEROLE)权限的用户才可以重置普通用户密码,无需输入旧密码。初始用户可以重置系统管理员的密码,系统管理员不允许重置其他系统管理员的密码。应当使用单引号将用户密码括起来。 EXPIRED 设置密码失效。只有初始用户、系统管理员(sysadmin)或拥有创建用户(CREATEROLE)权限的用户才可以设置用户密码失效,其中系统管理员也可以设置自己或其他系统管理员密码失效。不允许设置初始用户密码失效。 密码失效的用户可以登录数据库但不能执行查询操作,只有修改密码或由管理员重置密码后才可以恢复正常查询操作。 其他参数请参见CREATE ROLE的参数说明。
  • 参数说明 WITH [ RECURSIVE ] with_query [, ...] 用于声明一个或多个可以在主查询中通过名称引用的子查询,相当于临时表。 如果声明了RECURSIVE,那么允许SELECT子查询通过名称引用它自己。 其中with_query的详细格式为: with_query_name [ ( column_name [, ...] ) ] AS [ [ NOT ] MATERIALIZED ] ( {select | values | insert | update | delete} ) – with_query_name指定子查询生成的结果集名称,在查询中可使用该名称访问子查询的结果集。 – column_name指定子查询结果集中显示的列名。 – 每个子查询可以是SELECT,VALUES,INSERT,UPDATE或DELETE语句。 – 用户可以使用MATERIALIZED / NOT MATERIALIZED对CTE进行修饰。 如果声明为MATERIALIZED,WITH查询将被物化,生成一个子查询结果集的拷贝,在引用处直接查询该拷贝,因此WITH子查询无法和主干SELECT语句进行联合优化(如谓词下推、等价类传递等),对于此类场景可以使用NOT MATERIALIZED进行修饰,如果WITH查询语义上可以作为子查询内联执行,则可以进行上述优化。 如果用户没有显示声明物化属性则遵守以下规则:如果CTE只在所属主干语句中被引用一次,且语义上支持内联执行,则会被改写为子查询内联执行,否则以CTE Scan的方式物化执行。 INSERT ON DUPLICATE KEY UPDATE不支持WITH及WITH RECURSIVE子句。 INSERT语句的输出,只会显示最外层query block插入的tuple数量。比如: with cte as (insert into t1 values(1) retunring * ) insert into t1 select * from cte; 只会显示插入一条tuple,但实际上插入了两条。 plan_hint子句 以/*+ */的形式在INSERT关键字后,用于对INSERT对应的语句块生成的计划进行hint调优,详细用法请参见章节使用Plan Hint进行调优。每条语句中只有第一个/*+ plan_hint */注释块会作为hint生效,里面可以写多条hint。 table_name 要插入数据的目标表名。 取值范围:已存在的表名。 支持使用DATABASE LINK方式对远端表进行操作,使用方式详情请见DATABASE LINK。 partition_clause 指定分区插入操作 PARTITION { ( partition_name ) | FOR ( partition_value [, ...] ) } | SUBPARTITION { ( subpartition_name ) | FOR ( subpartition_value [, ...] ) } 关键字详见SELECT一节介绍 如果value子句的值和指定分区不一致,会抛出异常。 示例详见CREATE TABLE SUBPARTITION column_name 目标表中的字段名: 字段名可以有子字段名或者数组下标修饰。 没有在字段列表中出现的每个字段,将由系统默认值,或者声明时的默认值填充,若都没有则用NULL填充。例如,向一个复合类型中的某些字段插入数据的话,其他字段将是NULL。 目标字段(column_name)可以按顺序排列。如果没有列出任何字段,则默认全部字段,且顺序为表声明时的顺序。 如果value子句和query中只提供了N个字段,则目标字段为前N个字段。 value子句和query提供的值在表中从左到右关联到对应列。 取值范围:已存在的字段名。 expression 赋予对应column的一个有效表达式或值: 如果是INSERT ON DUPLICATE KEY UPDATE语句下,expression可以为VALUES(column_name)或EXCLUDED.column_name用来表示引用冲突行对应的column_name字段的值。需注意,其中VALUES(column_name)不支持嵌套在表达式中(例如VALUES(column_name)+1),但EXCLUDED不受此限制。 向表中字段插入单引号 " ' "时需要使用单引号自身进行转义。 如果插入行的表达式不是正确的数据类型,系统试图进行类型转换,若转换不成功,则插入数据失败,系统返回错误信息。 DEFAULT 对应字段名的缺省值。如果没有缺省值,则为NULL。 query 一个查询语句(SELECT语句),将查询结果作为插入的数据。 RETURNING 返回实际插入的行,RETURNING列表的语法与SELECT的输出列表一致。注意:INSERT ON DUPLICATE KEY UPDATE不支持RETURNING子句。 output_expression INSERT命令在每一行都被插入之后用于计算输出结果的表达式。 取值范围:该表达式可以使用table的任意字段。可以使用*返回被插入行的所有字段。 output_name 字段的输出名称。 取值范围:字符串,符合标识符命名规范。 ON DUPLICATE KEY UPDATE 对于带有唯一约束(UNIQUE INDEX或PRIMARY KEY)的表,如果插入数据违反唯一约束,则对冲突行执行UPDATE子句完成更新,对于不带唯一约束的表,则仅执行插入。UPDATE时,若指定NOTHING则忽略此条插入,可通过"EXCLUDE." 或者 "VALUES()" 来选择源数据相应的列。 支持触发器,触发器执行顺序由实际执行流程决定: 执行insert: 触发 before insert、 after insert触发器。 执行update:触发before insert、before update、after update触发器。 执行update nothing: 触发before insert触发器。 不支持延迟生效(DEFERRABLE)的唯一约束或主键。 如果表中存在多个唯一约束,如果所插入数据违反多个唯一约束,对于检测到冲突的第一行进行更新,其他冲突行不更新(检查顺序与索引维护具有强相关性,一般先创建的索引先进行冲突检查)。 如果插入多行,这些行均与表中同一行数据存在唯一约束冲突,则按照顺序,第一条执行插入或更新,之后依次执行更新。 主键、唯一索引列不允许UPDATE。 不支持列存,不支持外表。 expression不支持使用子查询表达式。
  • 示例 --创建一个空Data Source对象。 gaussdb=# CREATE DATA SOURCE ds_test1; --修改名称。 gaussdb=# ALTER DATA SOURCE ds_test1 RENAME TO ds_test; --修改属主。 gaussdb=# CREATE USER user_test1 IDENTIFIED BY '********'; gaussdb=# ALTER USER user_test1 WITH SYSADMIN; gaussdb=# ALTER DATA SOURCE ds_test OWNER TO user_test1; --修改TYPE和VERSION。 gaussdb=# ALTER DATA SOURCE ds_test TYPE 'MPPDB_TYPE' VERSION 'XXX'; --添加字段。 gaussdb=# ALTER DATA SOURCE ds_test OPTIONS (add dsn 'gaussdb', username 'test_user'); --修改字段。 gaussdb=# ALTER DATA SOURCE ds_test OPTIONS (set dsn 'unknown'); --删除字段。 gaussdb=# ALTER DATA SOURCE ds_test OPTIONS (drop username); --删除Data Source和user对象。 gaussdb=# DROP DATA SOURCE ds_test; gaussdb=# DROP USER user_test1;
  • 语法格式 ALTER DATA SOURCE src_name [TYPE 'type_str'] [VERSION {'version_str' | NULL}] [OPTIONS ( {[ ADD | SET | DROP ] optname ['optvalue']} [, ...] )]; ALTER DATA SOURCE src_name RENAME TO src_new_name; ALTER DATA SOURCE src_name OWNER TO new_owner;
共100000条