华为云用户手册

  • 语法格式 修改类型。 ALTER TYPE name action [, ... ]; 其中action对应的子句如下: 给复合类型增加新的属性。 1 ADD ATTRIBUTE attribute_name data_type [ COLLATE collation ] [ CASCADE | RESTRICT ] 从复合类型中删除一个属性。 1 DROP ATTRIBUTE [ IF EXISTS ] attribute_name [ CASCADE | RESTRICT ] 改变一种复合类型中某个属性的类型。 1 ALTER ATTRIBUTE attribute_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ CASCADE | RESTRICT ] 给复合类型增加新的属性。 ALTER TYPE name ADD ATTRIBUTE attribute_name data_type [ COLLATE collation ] [ CASCADE | RESTRICT ];
  • 背景信息 索引可以提高数据的访问速度,但同时也增加了插入、更新和删除操作的处理时间。所以是否要为表增加索引,索引建立在哪些字段上,是创建索引前必须要考虑的问题。需要分析应用程序的业务处理、数据使用、经常被用作查询的条件或者被要求排序的字段来确定是否建立索引。 索引建立在数据库表中的某些列上。因此,在创建索引时,应该仔细考虑在哪些列上创建索引。 在经常需要搜索查询的列上创建索引,可以加快搜索的速度。 在作为主键的列上创建索引,强制该列的唯一性和组织表中数据的排列结构。 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的。 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间。 在经常使用WHERE子句的列上创建索引,加快条件的判断速度。 为经常出现在关键字ORDER BY、GROUP BY、DISTINCT后面的字段建立索引。 索引创建成功后,系统会自动判断何时引用索引。当系统认为使用索引比顺序扫描更快时,就会使用索引。 索引创建成功后,必须和表保持同步以保证能够准确地找到新数据,这样就增加了数据操作的负荷。因此请定期删除无用的索引。 分区表索引分为LOCAL索引与GLOBAL索引,一个LOCAL索引对应一个具体分区,而GLOBAL索引则对应整个分区表。
  • GLOBAL_SESSION_MEMORY_DETAIL 统计各节点的线程的内存使用情况,以MemoryContext节点来统计。 表1 GLOBAL_SESSION_MEMORY_DETAIL字段 名称 类型 描述 node_name name 节点名称。 sessid text 线程启动时间+线程标识。 sesstype text 线程名称。 contextname text 内存上下文名称。 level smallint 内存上下文的重要级别。 parent text 父级内存上下文名称。 totalsize bigint 总申请内存大小(单位:字节)。 freesize bigint 空闲内存大小(单位:字节)。 usedsize bigint 使用内存大小(单位:字节)。 父主题: Session/Thread
  • 位串类型 位串就是一串1和0的字符串。它们可以用于存储位掩码。 GaussDB 支持两种位串类型:bit(n)和bit varying(n),这里的n是一个正整数,n最大取值为83886080,相当于10M的容量。 bit类型的数据必须准确匹配长度n,如果存储短或者长的数据都会报错。bit varying类型的数据是最长为n的变长类型,长度超过n时会被拒绝。一个没有长度的bit等效于bit(1),没有长度的bit varying表示没有长度限制。 如果用户明确地把一个位串值转换成bit(n),则此位串右边的内容将被截断或者在右边补齐零,直到刚好n位,而不会抛出任何错误。 如果用户明确地把一个位串数值转换成bit varying(n),如果它超过了n位,则它的右边将被截断。 使用ADMS平台8.1.3-200驱动版本及之前版本时,写入bit类型需要用::bit varying进行类型转换,否则可能出现异常报错。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 --创建表。 openGauss=# CREATE TABLE bit_type_t1 ( BT_COL1 INTEGER, BT_COL2 BIT(3), BT_COL3 BIT VARYING(5) ) ; --插入数据。 openGauss=# INSERT INTO bit_type_t1 VALUES(1, B'101', B'00'); --插入数据的长度不符合类型的标准会报错。 openGauss=# INSERT INTO bit_type_t1 VALUES(2, B'10', B'101'); ERROR: bit string length 2 does not match type bit(3) CONTEXT: referenced column: bt_col2 --将不符合类型长度的数据进行转换。 openGauss=# INSERT INTO bit_type_t1 VALUES(2, B'10'::bit(3), B'101'); --查看数据。 openGauss=# SELECT * FROM bit_type_t1; bt_col1 | bt_col2 | bt_col3 ---------+---------+--------- 1 | 101 | 00 2 | 100 | 101 (2 rows) --删除表。 openGauss=# DROP TABLE bit_type_t1; 父主题: 数据类型
  • SQL调优指南 SQL调优的唯一目的是“资源利用最大化”,即CPU、内存、磁盘I/O三种资源利用最大化。所有调优手段都是围绕资源使用开展的。所谓资源利用最大化是指SQL语句尽量高效,节省资源开销,以最小的代价实现最大的效益。比如做典型点查询的时候,可以用seqscan+filter(即读取每一条元组和点查询条件进行匹配)实现,也可以通过indexscan实现,显然indexscan可以以更小的代价实现相同的效果。 根据硬件资源和客户的业务特征确定合理的数据库部署方案和表定义是数据库在多数情况下满足性能要求的基础。下文的调优说明假设您已根据“软件安装”指引在安装过程中按照合理的数据库方案完成了安装,且已经根据“开发设计建议”的指引进行了数据库设计。 Query执行流程 SQL执行计划介绍 调优流程 更新统计信息 审视和修改表定义 典型SQL调优点 经验总结:SQL语句改写规则 SQL调优关键参数调整 使用Plan Hint进行调优 使用SQL PATCH进行调优 实际调优案例
  • SEQUENCE函数 序列函数为用户从序列对象中获取后续的序列值提供了简单的多用户安全的方法。 nextval(regclass) 描述:递增序列并返回新值。 为了避免从同一个序列获取值的并发事务被阻塞,nextval操作不会回滚;也就是说,一旦一个值已经被抓取,那么就认为它已经被用过了,并且不会再被返回。即使该操作处于事务中,当事务之后中断,或者如果调用查询结束不使用该值,也是如此。这种情况将在指定值的顺序中留下未使用的"空洞"。因此,GaussDB序列对象不能用于获得"无间隙"序列。 nextval函数只能在主机上执行,备机不支持执行此函数。 返回类型:numeric nextval函数有两种调用方式(其中第二种调用方式目前不支持Sequence命名中有特殊字符"."的情况),如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 openGauss=# CREATE SEQUENCE seqDemo; --示例1: openGauss=# SELECT nextval('seqDemo'); nextval --------- 1 (1 row) --示例2: openGauss=# SELECT seqDemo.nextval; nextval --------- 2 (1 row) openGauss=# DROP SEQUENCE seqDemo; currval(regclass) 描述:返回当前会话里最近一次nextval返回的数值。如果当前会话还没有调用过指定的sequence的nextval,那么调用currval将会报错。 返回类型:numeric currval函数有两种调用方式(其中第二种调用方式目前不支持Sequence命名中有特殊字符"."的情况),如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 openGauss=# CREATE SEQUENCE seq1; openGauss=# SELECT nextval('seq1'); --示例1: openGauss=# SELECT currval('seq1'); currval --------- 1 (1 row) --示例2: openGauss=# SELECT seq1.currval; currval --------- 1 (1 row) openGauss=# DROP SEQUENCE seq1; lastval() 描述:返回当前会话里最近一次nextval返回的数值。这个函数等效于currval,只是它不用序列名为参数,它抓取当前会话里面最近一次nextval使用的序列。如果当前会话还没有调用过nextval,那么调用lastval将会报错。 返回类型:numeric 示例: 1 2 3 4 5 6 7 8 openGauss=# CREATE SEQUENCE seq1; openGauss=# SELECT nextval('seq1'); openGauss=# SELECT lastval(); lastval --------- 1 (1 row) openGauss=# DROP SEQUENCE seq1; setval(regclass, numeric) 描述:设置序列的当前数值。 返回类型:numeric 示例: 1 2 3 4 5 6 7 8 openGauss=# CREATE SEQUENCE seqDemo; openGauss=# SELECT nextval('seqDemo'); openGauss=# SELECT setval('seqDemo',5); setval -------- 5 (1 row) openGauss=# DROP SEQUENCE seqDemo; setval(regclass, numeric, Boolean) 描述:设置序列的当前数值以及is_called标志。 返回类型:numeric 示例: 1 2 3 4 5 6 7 8 openGauss=# CREATE SEQUENCE seqDemo; openGauss=# SELECT nextval('seqDemo'); openGauss=# SELECT setval('seqDemo',5,true); setval -------- 5 (1 row) openGauss=# DROP SEQUENCE seqDemo; Setval后当前会话会立刻生效,但如果其他会话有缓存的序列值,只能等到缓存值用尽才能感知Setval的作用。所以为了避免序列值冲突,setval要谨慎使用。 因为序列是非事务的,setval造成的改变不会由于事务的回滚而撤销。 nextval函数只能在主机上执行,备机不支持执行此函数。 pg_sequence_last_value(sequence_oid oid, OUT cache_value int16, OUT last_value int16) 描述:获取指定sequence的参数,包含缓存值,当前值。 返回类型:int16,int16 父主题: 函数和操作符
  • 范围函数 如果范围是空或者需要的界限是无穷的,lower和upper函数将返回null。lower_inc、upper_inc、lower_inf和upper_inf函数均对空范围返回false。 numrange(numeric, numeric, [text]) 描述:表示一个范围。 返回类型:范围元素类型 示例: 1 2 3 4 5 6 7 8 9 10 openGauss=# SELECT numrange(1.1,2.2) AS RESULT; result -------- [1.1,2.2) (1 row) openGauss=# SELECT numrange(1.1,2.2, '()') AS RESULT; result -------- (1.1,2.2) (1 row) lower(anyrange) 描述:范围的下界 返回类型:范围元素类型 示例: 1 2 3 4 5 openGauss=# SELECT lower(numrange(1.1,2.2)) AS RESULT; result -------- 1.1 (1 row) upper(anyrange) 描述:范围的上界 返回类型:范围元素类型 示例: 1 2 3 4 5 openGauss=# SELECT upper(numrange(1.1,2.2)) AS RESULT; result -------- 2.2 (1 row) isempty(anyrange) 描述:范围是否为空 返回类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT isempty(numrange(1.1,2.2)) AS RESULT; result -------- f (1 row) lower_inc(anyrange) 描述:是否包含下界 返回类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT lower_inc(numrange(1.1,2.2)) AS RESULT; result -------- t (1 row) upper_inc(anyrange) 描述:是否包含上界 返回类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT upper_inc(numrange(1.1,2.2)) AS RESULT; result -------- f (1 row) lower_inf(anyrange) 描述:下界是否为无穷 返回类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT lower_inf('(,)'::daterange) AS RESULT; result -------- t (1 row) upper_inf(anyrange) 描述:上界是否为无穷 返回类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT upper_inf('(,)'::daterange) AS RESULT; result -------- t (1 row)
  • MEMORY_NODE_DETAIL 显示某个数据库节点内存使用情况。 表1 MEMORY_NODE_DETAIL字段 名称 类型 描述 nodename text 节点名称。 memorytype text 内存的名称。 max_process_memory:GaussDB实例所占用的内存大小。 process_used_memory:进程所使用的内存大小。 max_dynamic_memory:最大动态内存。 dynamic_used_memory:已使用的动态内存。 dynamic_peak_memory:内存的动态峰值。 dynamic_used_shrctx:最大动态共享内存上下文。 dynamic_peak_shrctx:共享内存上下文的动态峰值。 max_shared_memory:最大共享内存。 shared_used_memory:已使用的共享内存。 max_sctpcomm_memory:TCP代理通信所允许使用的最大内存。 sctpcomm_used_memory:TCP代理通信已使用的内存大小。 sctpcomm_peak_memory:TCP代理通信的内存峰值。 other_used_memory:其他已使用的内存大小。 gpu_max_dynamic_memory:GPU最大动态内存。 gpu_dynamic_used_memory:GPU已使用的动态内存。 gpu_dynamic_peak_memory:GPU内存的动态峰值。 pooler_conn_memory:连接池申请内存计数。 pooler_freeconn_memory:连接池空闲连接的内存计数。 storage_compress_memory:存储模块压缩使用的内存大小。 udf_reserved_memory:UDF预留的内存大小。 memorymbytes integer 内存使用的大小,单位为MB。 父主题: Memory
  • STAT_USER_TABLES 显示当前节点所有命名空间中用户自定义普通表的状态信息。 表1 STAT_USER_TABLES字段 名称 类型 描述 relid oid 表的OID。 schemaname name 该表的模式名。 relname name 表名。 seq_scan bigint 该表发起的顺序扫描数。 seq_tup_read bigint 顺序扫描抓取的活跃行数。 idx_scan bigint 该表发起的索引扫描数。 idx_tup_fetch bigint 索引扫描抓取的活跃行数。 n_tup_ins bigint 插入行数。 n_tup_upd bigint 更新行数。 n_tup_del bigint 删除行数。 n_tup_hot_upd bigint HOT更新行数(即没有更新所需的单独索引)。 n_live_tup bigint 估计活跃行数。 n_dead_tup bigint 估计死行数。 last_vacuum timestamp with time zone 最后一次该表是手动清理的(不计算VACUUM FULL)时间。 last_autovacuum timestamp with time zone 上次被autovacuum守护进程清理的时间。 last_analyze timestamp with time zone 上次手动分析该表的时间。 last_autoanalyze timestamp with time zone 上次被autovacuum守护进程分析的时间。 vacuum_count bigint 该表被手动清理的次数(不计算VACUUM FULL)。 autovacuum_count bigint 该表被autovacuum清理的次数。 analyze_count bigint 该表被手动分析的次数。 autoanalyze_count bigint 该表被autovacuum守护进程分析的次数。 父主题: Object
  • 处理结果集 ODBC处理结果集是从数据库中获取数据并将其提供给应用程序进行处理,作用包括但不限于:检索数据、数据展示、数据处理、数据传输和业务逻辑实现等。 ODBC提供处理结果集的相关API如表1所示。 表1 相关API说明 功能 API 绑定缓冲区到结果集的列中 SQLBindCol 结果集中取行集 SQLFetch 返回结果集中某一列的数据 SQLGetData 获取结果集中列的描述信息 SQLColAttribute 查看最近一次操作错误信息 SQLGetDiagRec 示例如下(完整示例请参考获取和处理数据库中的数据): // 在执行完成SQL语句后,获取结果集某一列的属性。 SQLColAttribute(V_OD_hstmt,1,SQL_DESC_TYPE,typename,100,NULL,NULL); printf("SQLColAtrribute %s\n",typename); // 绑定结果集。 SQLBindCol(V_OD_hstmt,1,SQL_C_SLONG, (SQLPOINTER)&V_OD_buffer,150, (SQLLEN *)&V_OD_err); // 通过SQLFetch取结果集中数据。 V_OD_erg=SQLFetch(V_OD_hstmt); // 通过SQLGetData获取并返回数据。 while(V_OD_erg != SQL_NO_DATA) { SQLGetData(V_OD_hstmt,1,SQL_C_SLONG,(SQLPOINTER)&V_OD_id,0,NULL); printf("SQLGetData ----ID = %d\n",V_OD_id); V_OD_erg=SQLFetch(V_OD_hstmt); }; printf("Done !\n"); 父主题: 开发步骤
  • SQL关键字 表1 SQL关键字 关键字 GaussDB SQL:1999 SQL-92 ABORT 非保留 - - ABS - 非保留 - ABSOLUTE 非保留 保留 保留 AC CES S 非保留 - - ACCOUNT 非保留 - - ACTION 非保留 保留 保留 ADA - 非保留 非保留 ADD 非保留 保留 保留 ADMIN 非保留 保留 - AFTER 非保留 保留 - AGGREGATE 非保留 保留 - ALGORITHM 非保留 - - ALIAS - 保留 - ALL 保留 保留 保留 ALLOCATE - 保留 保留 ALSO 非保留 - - ALTER 非保留 保留 保留 ALWAYS 非保留 - - ANALYSE 保留 - - ANALYZE 保留 - - AND 保留 保留 保留 ANY 保留 保留 保留 APP 非保留 - - APPEND 非保留 - - ARCHIVE 非保留 - - ARE - 保留 保留 ARRAY 保留 保留 - AS 保留 保留 保留 ASC 保留 保留 保留 ASENSITIVE - 非保留 - ASSERTION 非保留 保留 保留 ASSIGNMENT 非保留 非保留 - ASYMMETRIC 保留 非保留 - AT 非保留 保留 保留 ATOMIC - 非保留 - ATTRIBUTE 非保留 - - AUDIT 非保留 - - AUTHID 保留 - - AUTHORIZATION 保留(可以是函数或类型) 保留 保留 AUTOEXTEND 非保留 - - AUTOMAPPED 非保留 - - AVG - 非保留 保留 BACKWARD 非保留 - - BARRIER 非保留 - - BEFORE 非保留 保留 - BEGIN 非保留 保留 保留 BEGIN_NON_ANOYBLOCK 非保留 - - BETWEEN 非保留(不能是函数或类型) 非保留 保留 BIGINT 非保留(不能是函数或类型) - - BINARY 保留(可以是函数或类型) 保留 - BINARY_DOUBLE 非保留(不能是函数或类型) - - BINARY_INTEGER 非保留(不能是函数或类型) - - BIT 非保留(不能是函数或类型) 保留 保留 BIT_LENGTH - 非保留 保留 BITVAR - 非保留 - BLANKS 非保留 - - BLOB 非保留 保留 - BLOCKCHAIN 非保留 - - BODY 非保留 - - BOOLEAN 非保留(不能是函数或类型) 保留 - BOTH 保留 保留 保留 BREADTH - 保留 - BUCKETCNT 非保留(不能是函数或类型) - - BUCKETS 保留 - - BY 非保留 保留 保留 BYTEAWITHOUTORDER 非保留(不能是函数或类型) - - BYTEAWITHOUTORDERWITHEQUAL 非保留(不能是函数或类型) - - C - 非保留 非保留 CACHE 非保留 - - CALL 非保留 保留 - CALLED 非保留 非保留 - CANCELABLE 非保留 - - CARDINALITY - 非保留 - CASCADE 非保留 保留 保留 CASCADED 非保留 保留 保留 CASE 保留 保留 保留 CAST 保留 保留 保留 CATA LOG 非保留 保留 保留 CATALOG_NAME - 非保留 非保留 CHAIN 非保留 非保留 - CHAR 非保留(不能是函数或类型) 保留 保留 CHAR_LENGTH - 非保留 保留 CHARACTER 非保留(不能是函数或类型) 保留 保留 CHARACTER_LENGTH - 非保留 保留 CHARACTER_SET_CATALOG - 非保留 非保留 CHARACTER_SET_NAME - 非保留 非保留 CHARACTER_SET_SCHEMA - 非保留 非保留 CHARACTERIS TICS 非保留 - - CHARACTERSET 非保留 - - CHECK 保留 保留 保留 CHECKED - 非保留 - CHECKPOINT 非保留 - - CLASS 非保留 保留 - CLASS_ORIGIN - 非保留 非保留 CLEAN 非保留 - - CLIENT 非保留 - - CLIENT_MASTER_KEY 非保留 - - CLIENT_MASTER_KEYS 非保留 - - CLOB 非保留 保留 - CLOSE 非保留 保留 保留 CLUSTER 非保留 - - COALESCE 非保留(不能是函数或类型) 非保留 保留 COBOL - 非保留 非保留 COLLATE 保留 保留 保留 COLLATION 保留(可以是函数或类型) 保留 保留 COLLATION_CATALOG - 非保留 非保留 COLLATION_NAME - 非保留 非保留 COLLATION_SCHEMA - 非保留 非保留 COLUMN 保留 保留 保留 COLUMN_ENCRYPTION_KEY 非保留 - - COLUMN_ENCRYPTION_KEYS 非保留 - - COLUMN_NAME - 非保留 非保留 COMMAND_FUNCTION - 非保留 非保留 COMMAND_FUNCTION_CODE - 非保留 - COMMENT 非保留 - - COMMENTS 非保留 - - COMMIT 非保留 保留 保留 COMMITTED 非保留 非保留 非保留 COMPACT 保留(可以是函数或类型) - - COMPATIBLE_ILLEGAL_CHARS 非保留 - - COMPLETE 非保留 - - COMPLETION - 保留 - CONCURRENTLY 保留(可以是函数或类型) - - CONDITION 非保留 - - CONDITION_NUMBER - 非保留 非保留 CONFIGURATION 非保留 - - CONNECT 非保留 保留 保留 CONNECTION 非保留 保留 保留 CONNECTION_NAME - 非保留 非保留 CONSTANT 非保留 - - CONSTRAINT 保留 保留 保留 CONSTRAINT_CATALOG - 非保留 非保留 CONSTRAINT_NAME - 非保留 非保留 CONSTRAINT_SCHEMA - 非保留 非保留 CONSTRAINTS 非保留 保留 保留 CONSTRUCTOR - 保留 - CONTAINS - 非保留 - CONTENT 非保留 - - CONTINUE 非保留 保留 保留 CONTVIEW 非保留 - - CONVERSION 非保留 - - CONVERT - 非保留 保留 COORDINATOR 非保留 - - COORDINATORS 非保留 - - COPY 非保留 - - CORRESPONDING - 保留 保留 COST 非保留 - - COUNT - 非保留 保留 CREATE 保留 保留 保留 CROSS 保留(可以是函数或类型) 保留 保留 CS N 保留(可以是函数或类型) - - CSV 非保留 - - CUBE 非保留 保留 - CURRENT 非保留 保留 保留 CURRENT_CATALOG 保留 - - CURRENT_DATE 保留 保留 保留 CURRENT_PATH - 保留 - CURRENT_ROLE 保留 保留 - CURRENT_SCHEMA 保留(可以是函数或类型) - - CURRENT_TIME 保留 保留 保留 CURRENT_TIMESTAMP 保留 保留 保留 CURRENT_USER 保留 保留 保留 CURSOR 非保留 保留 保留 CURSOR_NAME - 非保留 非保留 CYCLE 非保留 保留 - DATA 非保留 保留 非保留 DATABASE 非保留 - - DATAFILE 非保留 - - DATANODE 非保留 - - DATANODES 非保留 - - DATATYPE_CL 非保留 - - DATE 非保留(不能是函数或类型) 保留 保留 DATE_FORMAT 非保留 - - DATETIME_INTERVAL_CODE - 非保留 非保留 DATETIME_INTERVAL_PRECISION - 非保留 非保留 DAY 非保留 保留 保留 DBCOMPATIBILITY 非保留 - - DEALLOCATE 非保留 保留 保留 DEC 非保留(不能是函数或类型) 保留 保留 DECIMAL 非保留(不能是函数或类型) 保留 保留 DECLARE 非保留 保留 保留 DECODE 非保留(不能是函数或类型) - - DEFAULT 保留 保留 保留 DEFAULTS 非保留 - - DEFERRABLE 保留 保留 保留 DEFERRED 非保留 保留 保留 DEFINED - 非保留 - DEFINER 非保留 非保留 - DELETE 非保留 保留 保留 DELIMITER 非保留 - - DELIMITERS 非保留 - - DELTA 非保留 - - DELTAMERGE 保留(可以是函数或类型) - - DEPTH - 保留 - DEREF - 保留 - DESC 保留 保留 保留 DESCRIBE - 保留 保留 DESCRIPTOR - 保留 保留 DESTROY - 保留 - DESTRUCTOR - 保留 - DETERMINISTIC 非保留 保留 - DIAGNOSTICS - 保留 保留 DICTIONARY 非保留 保留 - DIRECT 非保留 - - DIRECTORY 非保留 - - DISABLE 非保留 - - DISCARD 非保留 - - DISCONNECT 非保留 保留 保留 DISPATCH - 非保留 - DISTINCT 保留 保留 保留 DISTRIBUTE 非保留 - - DISTRIBUTION 非保留 - - DO 保留 - - DOCUMENT 非保留 - - DOMAIN 非保留 保留 保留 DOUBLE 非保留 保留 保留 DROP 非保留 保留 保留 DUPLICATE 非保留 - - DYNAMIC - 保留 - DYNAMIC_FUNCTION - 非保留 非保留 DYNAMIC_FUNCTION_CODE - 非保留 - EACH 非保留 保留 - ELASTIC 非保留 - - ELSE 保留 保留 保留 ENABLE 非保留 - - ENCLOSED 非保留 - - ENCODING 非保留 - - ENCRYPTED 非保留 - - ENCRYPTED_VALUE 非保留 - - ENCRYPTION 非保留 - - ENCRYPTION_TYPE 非保留 - - END 保留 保留 保留 END-EXEC - 保留 保留 ENFORCED 非保留 - - ENUM 非保留 - - EOL 非保留 - - EQUALS - 保留 - ERRORS 非保留 - - ESCAPE 非保留 保留 保留 ESCAPING 非保留 - - EVERY 非保留 保留 - EXCEPT 保留 保留 保留 EXCEPTION - 保留 保留 EXCHANGE 非保留 - - EXCLUDE 非保留 - - EXCLUDED 保留 - - EXCLUDING 非保留 - - EXCLUSIVE 非保留 - - EXEC - 保留 保留 EXECUTE 非保留 保留 保留 EXISTING - 非保留 - EXISTS 非保留(不能是函数或类型) 非保留 保留 EXPIRED 非保留 - - EXPLAIN 非保留 - - EXTENSION 非保留 - - EXTERNAL 非保留 保留 保留 EXTRACT 非保留(不能是函数或类型) 非保留 保留 FALSE - 保留 保留 FAMILY 非保留 - - FAST 非保留 - - FEATURES 非保留 - - FENCED 保留 - - FETCH 保留 保留 保留 FIELDS 非保留 - - FILEHEADER 非保留 - - FILL_MISSING_FIELDS 非保留 - - FILLER 非保留 - - FILTER 非保留 - 保留 FINAL - 非保留 - FIRST 非保留 保留 保留 FIXED 非保留 - 保留 FLOAT 非保留(不能是函数或类型) 保留 保留 FOLLOWING 非保留 - - FOR 保留 保留 保留 FORCE 非保留 - - FOREIGN 保留 保留 保留 FORMATTER 非保留 - - FORTRAN - 非保留 非保留 FORWARD 非保留 - - FOUND - 保留 保留 FREE - 保留 - FREEZE 保留(可以是函数或类型) - - FROM 保留 保留 保留 FULL 保留(可以是函数或类型) 保留 保留 FUNCTION 非保留 保留 - FUNCTIONS 非保留 - - G - 非保留 - GENERAL - 保留 - GENERATED 非保留 非保留 - GET - 保留 保留 GLOBAL 非保留 保留 保留 GO - 保留 保留 GOTO - 保留 保留 GRANT 保留 保留 保留 GRANTED 非保留 非保留 - GREATEST 非保留(不能是函数或类型) - - GROUP 保留 保留 保留 GROUPING 非保留(不能是函数或类型) 保留 - GROUPPARENT 保留 - - HANDLER 非保留 - - HAVING 保留 保留 保留 HDFSDIRECTORY 保留(可以是函数或类型) - - HEADER 非保留 - - HIERARCHY - 非保留 - HOLD 非保留 非保留 - HOST - 保留 - HOUR 非保留 保留 保留 IDENTIFIED 非保留 - - IDENTITY 非保留 保留 保留 IF 非保留 - - IGNORE - 保留 - IGNORE_EXTRA_DATA 非保留 - - ILIKE 保留(可以是函数或类型) - - IMMEDIATE 非保留 保留 保留 IMMUTABLE 非保留 - - IMPLEMENTATION - 非保留 - IMPLICIT 非保留 - - IN 保留 保留 保留 INCLUDE 非保留 - - INCLUDING 非保留 - - INCREMENT 非保留 - - INCREMENTAL 非保留 - - INDEX 非保留 - - INDEXES 非保留 - - INDICATOR - 保留 保留 INFILE 非保留 - - INFIX - 非保留 - INHERIT 非保留 - - INHERITS 非保留 - - INITIAL 非保留 - - INITIALIZE - 保留 - INITIALLY 保留 保留 保留 INITRANS 非保留 - - INLINE 非保留 - - INNER 保留(可以是函数或类型) 保留 保留 INOUT 非保留(不能是函数或类型) 保留 - INPUT 非保留 保留 保留 INSENSITIVE 非保留 非保留 保留 INSERT 非保留 保留 保留 INSTANCE - 非保留 - INSTANTIABLE - 非保留 - INSTEAD 非保留 - - INT 非保留(不能是函数或类型) 保留 保留 INTEGER 非保留(不能是函数或类型) 保留 保留 INTERNAL 非保留 - - INTERSECT 保留 保留 保留 INTERVAL 非保留(不能是函数或类型) 保留 保留 INTO 保留 保留 保留 INVOKER 非保留 非保留 - IP 非保留 - - IS 保留 保留 保留 ISNULL 非保留 - - ISOLATION 非保留 保留 保留 ITERATE - 保留 - JOIN 保留(可以是函数或类型) 保留 保留 K - 非保留 - KEY 非保留 保留 保留 KEY_MEMBER - 非保留 - KEY_PATH 非保留 - - KEY_STORE 非保留 - - KEY_TYPE - 非保留 - KILL 非保留 - - LABEL 非保留 - - LANGUAGE 非保留 保留 保留 LARGE 非保留 保留 - LAST 非保留 保留 保留 LATERAL - 保留 - LC_COLLATE 非保留 - - LC_CTYPE 非保留 - - LEADING 保留 保留 保留 LEAKPROOF 非保留 - - LEAST 非保留(不能是函数或类型) - - LEFT 保留(可以是函数或类型) 保留 保留 LENGTH - 非保留 非保留 LESS 保留 保留 - LEVEL 非保留 保留 保留 LIKE 保留(可以是函数或类型) 保留 保留 LIMIT 保留 保留 - LIST 非保留 - - LISTEN 非保留 - - LOAD 非保留 - - LOCAL 非保留 保留 保留 LOCALTIME 保留 保留 - LOCALTIMESTAMP 保留 保留 - LOCATION 非保留 - - LOCATOR - 保留 - LOCK 非保留 - - LOG 非保留 - - LOGGING 非保留 - - LOGIN_ANY 非保留 - - LOGIN_FAILURE 非保留 - - LOGIN_SUCCESS 非保留 - - LOGOUT 非保留 - - LOOP 非保留 - - LOWER - 非保留 保留 M - 非保留 - MAP - 保留 - MAPPING 非保留 - - MASKING 非保留 - - MASTER 非保留 - - MATCH 非保留 保留 保留 MATCHED 非保留 - - MATERIALIZED 非保留 - - MAX - 非保留 保留 MAXEXTENTS 非保留 - - MAXSIZE 非保留 - - MAXTRANS 非保留 - - MAXVALUE 保留 - - MERGE 非保留 - - MESSAGE_LENGTH - 非保留 非保留 MESSAGE_OCTET_LENGTH - 非保留 非保留 MESSAGE_TEXT - 非保留 非保留 METHOD - 非保留 - MIN - 非保留 保留 MINEXTENTS 非保留 - - MINUS 保留 - - MINUTE 非保留 保留 保留 MINVALUE 非保留 - - MOD - 非保留 - MODE 非保留 - - MODEL 非保留 - - MODIFIES - 保留 - MODIFY 保留 保留 - MODULE - 保留 保留 MONTH 非保留 保留 保留 MORE - 非保留 非保留 MOVE 非保留 - - MOVEMENT 非保留 - - MUMPS - 非保留 非保留 NAME 非保留 非保留 非保留 NAMES 非保留 保留 保留 NATIONAL 非保留(不能是函数或类型) 保留 保留 NATURAL 保留(可以是函数或类型) 保留 保留 NCHAR 非保留(不能是函数或类型) 保留 保留 NCLOB - 保留 - NEW - 保留 - NEXT 非保留 保留 保留 NO 非保留 保留 保留 NOCYCLE 保留 - - NODE 非保留 - - NOLOGGING 非保留 - - NOMAXVALUE 非保留 - - NOMINVALUE 非保留 - - NONE 非保留(不能是函数或类型) 保留 - NOT 保留 保留 保留 NOTHING 非保留 - - NOTIFY 非保留 - - NOTNULL 保留(可以是函数或类型) - - NOWAIT 非保留 - - NULL 保留 保留 保留 NULLABLE - 非保留 非保留 NULLCOLS 非保留 - - NULLIF 非保留(不能是函数或类型) 非保留 保留 NULLS 非保留 - - NUMBER 非保留(不能是函数或类型) 非保留 非保留 NUMERIC 非保留(不能是函数或类型) 保留 保留 NUMSTR 非保留 - - NVARCHAR2 非保留(不能是函数或类型) - - NVL 非保留(不能是函数或类型) - - OBJECT 非保留 保留 - OCTET_LENGTH - 非保留 保留 OF 非保留 保留 保留 OFF 非保留 保留 - OFFSET 保留 - - OIDS 非保留 - - OLD - 保留 - ON 保留 保留 保留 ONLY 保留 保留 保留 OPEN - 保留 保留 OPERATION - 保留 - OPERATOR 非保留 - - OPTIMIZATION 非保留 - - OPTION 非保留 保留 保留 OPTIONALLY 非保留 - - OPTIONS 非保留 非保留 - OR 保留 保留 保留 ORDER 保留 保留 保留 ORDINALITY - 保留 - OUT 非保留(不能是函数或类型) 保留 - OUTER 保留(可以是函数或类型) 保留 保留 OUTPUT - 保留 保留 OVER 非保留 - - OVERLAPS 保留(可以是函数或类型) 非保留 保留 OVERLAY 非保留(不能是函数或类型) 非保留 - OVERRIDING - 非保留 - OWNED 非保留 - - OWNER 非保留 - - PACKAGE 非保留 - - PACKAGES 非保留 - - PAD - 保留 保留 PA RAM ETER - 保留 - PARAMETER_MODE - 非保留 - PARAMETER_NAME - 非保留 - PARAMETER_ORDINAL_POSITION - 非保留 - PARAMETER_SPECIFIC_CATALOG - 非保留 - PARAMETER_SPECIFIC_NAME - 非保留 - PARAMETER_SPECIFIC_SCHEMA - 非保留 - PARAMETERS - 保留 - PARSER 非保留 - - PARTIAL 非保留 保留 保留 PARTITION 非保留 - - PARTITIONS 非保留 - - PASCAL - 非保留 非保留 PASSING 非保留 - - PASSWORD 非保留 - - PATH - 保留 - PCTFREE 非保留 - - PER 非保留 - - PERCENT 非保留 - - PERFORMANCE 保留 - - PERM 非保留 - - PLACING 保留 - - PLAN 非保留 - - PLANS 非保留 - - PLI - 非保留 非保留 POLICY 非保留 - - POOL 非保留 - - POSITION 非保留(不能是函数或类型) 非保留 保留 POSTFIX - 保留 - PRECEDING 非保留 - - PRECISION 非保留(不能是函数或类型) 保留 保留 PREDICT 非保留 - - PREFERRED 非保留 - - PREFIX 非保留 保留 - PREORDER - 保留 - PREPARE 非保留 保留 保留 PREPARED 非保留 - - PRESERVE 非保留 保留 保留 PRIMARY 保留 保留 保留 PRIOR 非保留 保留 保留 PRIORER 保留 - - PRIVATE 非保留 - - PRIVILEGE 非保留 - - PRIVILEGES 非保留 保留 保留 PROCEDURAL 非保留 - - PROCEDURE 保留 保留 保留 PROFILE 非保留 - - PUBLIC - 保留 保留 PUBLICATION 非保留 - - PUBLISH 非保留 - - PURGE 非保留 - - QUERY 非保留 - - QUOTE 非保留 - - RANDOMIZED 非保留 - - RANGE 非保留 - - RATIO 非保留 - - RAW 非保留 - - READ 非保留 保留 保留 READS - 保留 - REAL 非保留(不能是函数或类型) 保留 保留 REASSIGN 非保留 - - REBUILD 非保留 - - RECHECK 非保留 - - RECURSIVE 非保留 保留 - RECYCLEBIN 保留(可以是函数或类型) - - REDISANYVALUE 非保留 - - REF 非保留 保留 - REFERENCES 保留 保留 保留 REFERENCING - 保留 - REFRESH 非保留 - - REINDEX 非保留 - - REJECT 保留 - - RELATIVE 非保留 保留 保留 RELEASE 非保留 - - RELOPTIONS 非保留 - - REMOTE 非保留 - - REMOVE 非保留 - - RENAME 非保留 - - REPEATABLE 非保留 非保留 非保留 REPLACE 非保留 - - REPLICA 非保留 - - RESET 非保留 - - RESIZE 非保留 - - RESOURCE 非保留 - - RESTART 非保留 - - RESTRICT 非保留 保留 保留 RESULT - 保留 - RETURN 非保留 保留 - RETURNED_LENGTH - 非保留 非保留 RETURNED_OCTET_LENGTH - 非保留 非保留 RETURNED_SQLSTATE - 非保留 非保留 RETURNING 保留 - - RETURNS 非保留 保留 - REUSE 非保留 - - REVOKE 非保留 保留 保留 RIGHT 保留(可以是函数或类型) 保留 保留 ROLE 非保留 保留 - ROLES 非保留 - - ROLLBACK 非保留 保留 保留 ROLLUP 非保留 保留 - ROTATION 非保留 - - ROUTINE - 保留 - ROUTINE_CATALOG - 非保留 - ROUTINE_NAME - 非保留 - ROUTINE_SCHEMA - 非保留 - ROW 非保留(不能是函数或类型) 保留 - ROW_COUNT - 非保留 非保留 ROWNUM 保留 - - ROWS 非保留 保留 保留 ROWTYPE 非保留 - - RULE 非保留 - - SAMPLE 非保留 - - SAVEPOINT 非保留 保留 - SCALE - 非保留 非保留 SCHEMA 非保留 保留 保留 SCHEMA_NAME - 非保留 非保留 SCOPE - 保留 - SCROLL 非保留 保留 保留 SEARCH 非保留 保留 - SECOND 非保留 保留 保留 SECTION - 保留 保留 SECURITY 非保留 非保留 - SELECT 保留 保留 保留 SELF - 非保留 - SENSITIVE - 非保留 - SEQUENCE 非保留 保留 - SEQUENCES 非保留 - - SERIALIZABLE 非保留 非保留 非保留 SERVER 非保留 - - SERVER_NAME - 非保留 非保留 SESSION 非保留 保留 保留 SESSION_USER 保留 保留 保留 SET 非保留 保留 保留 SETOF 非保留(不能是函数或类型) - - SETS 非保留 保留 - SHARE 非保留 - - SHIPPABLE 非保留 - - SHOW 非保留 - - SHUTDOWN 非保留 - - SIBLINGS 非保留 - - SIMILAR 保留(可以是函数或类型) 非保留 - SIMPLE 非保留 非保留 - SIZE 非保留 保留 保留 SKIP 非保留 - - SLICE 非保留 - - SMALLDATETIME 非保留(不能是函数或类型) - - SMALLDATETIME_FORMAT 非保留 - - SMALLINT 非保留(不能是函数或类型) 保留 保留 SNAPSHOT 非保留 - - SOME 保留 保留 保留 SOURCE 非保留 非保留 - SPACE 非保留 保留 保留 SPECIFIC - 保留 - SPECIFIC_NAME - 非保留 - SPECIFICTYPE - 保留 - SPILL 非保留 - - SPLIT 非保留 - - SQL - 保留 保留 SQLCODE - - 保留 SQLERROR - - 保留 SQLEXCEPTION - 保留 - SQLSTATE - 保留 保留 SQLWARNING - 保留 - STABLE 非保留 - - STANDALONE 非保留 - - START 非保留 保留 - STATE - 保留 - STATEMENT 非保留 保留 - STATEMENT_ID 非保留 - - STATIC - 保留 - STATISTICS 非保留 - - STDIN 非保留 - - STDOUT 非保留 - - STORAGE 非保留 - - STORE 非保留 - - STORED 非保留 - - STRATIFY 非保留 - - STREAM 非保留 - - STRICT 非保留 - - STRIP 非保留 - - STRUCTURE - 保留 - STYLE - 非保留 - SUBCLASS_ORIGIN - 非保留 非保留 SUBLIST - 非保留 - SUBPARTITION 非保留 - - SUBSCRIPTION 非保留 - - SUBSTRING 非保留(不能是函数或类型) 非保留 保留 SUM - 非保留 保留 SYMMETRIC 保留 非保留 - SYNONYM 非保留 - - SYS_REFCURSOR 非保留 - - SYSDATE 保留 - - SYSID 非保留 - - SYSTEM 非保留 非保留 - SYSTEM_USER - 保留 保留 TABLE 保留 保留 保留 TABLE_NAME - 非保留 非保留 TABLES 非保留 - - TABLESAMPLE 保留(可以是函数或类型) - - TABLESPACE 非保留 - - TARGET 非保留 - - TEMP 非保留 - - TEMPLATE 非保留 - - TEMPORARY 非保留 保留 保留 TERMINATE - 保留 - TERMINATED 非保留 - - TEXT 非保留 - - THAN 非保留 保留 - THEN 保留 保留 保留 TIME 非保留(不能是函数或类型) 保留 保留 TIME_FORMAT 非保留 - - TIMECAPSULE 保留(可以是函数或类型) - - TIMESTAMP 非保留(不能是函数或类型) 保留 保留 TIMESTAMP_FORMAT 非保留 - - TIMESTAMPDIFF 非保留(不能是函数或类型) - - TIMEZONE_HOUR - 保留 保留 TIMEZONE_MINUTE - 保留 保留 TINYINT 非保留(不能是函数或类型) - - TO 保留 保留 保留 TRAILING 保留 保留 保留 TRANSACTION 非保留 保留 保留 TRANSACTION_ACTIVE - 非保留 - TRANSACTIONS_COMMITTED - 非保留 - TRANSACTIONS_ROLLED_BACK - 非保留 - TRANSFORM 非保留 非保留 - TRANSFO RMS - 非保留 - TRANSLATE - 非保留 保留 TRANSLATION - 保留 保留 TREAT 非保留(不能是函数或类型) 保留 - TRIGGER 非保留 保留 - TRIGGER_CATALOG - 非保留 - TRIGGER_NAME - 非保留 - TRIGGER_SCHEMA - 非保留 - TRIM 非保留(不能是函数或类型) 非保留 保留 TRUE - 保留 保留 TRUNCATE 非保留 - - TRUSTED 非保留 - - TSFIELD 非保留 - - TSTAG 非保留 - - TSTIME 非保留 - - TYPE 非保留 非保留 非保留 TYPES 非保留 - - UNBOUNDED 非保留 - - UNCOMMITTED 非保留 非保留 非保留 UNDER - 保留 - UNENCRYPTED 非保留 - - UNION 保留 保留 保留 UNIQUE 保留 保留 保留 UNKNOWN 非保留 保留 保留 UNLIMITED 非保留 - - UNLISTEN 非保留 - - UNLOCK 非保留 - - UNLOGGED 非保留 - - UNNAMED - 非保留 非保留 UNNEST - 保留 - UNTIL 非保留 - - UNUSABLE 非保留 - - UPDATE 非保留 保留 保留 UPPER - 非保留 保留 USAGE - 保留 保留 USEEOF 非保留 - - USER 保留 保留 保留 USER_DEFINED_TYPE_CATALOG - 非保留 - USER_DEFINED_TYPE_NAME - 非保留 - USER_DEFINED_TYPE_SCHEMA - 非保留 - USING 保留 保留 保留 VACUUM 非保留 - - VALID 非保留 - - VALIDATE 非保留 - - VALIDATION 非保留 - - VALIDATOR 非保留 - - VALUE 非保留 保留 保留 VALUES 非保留(不能是函数或类型) 保留 保留 VARCHAR 非保留(不能是函数或类型) 保留 保留 VARCHAR2 非保留(不能是函数或类型) - - VARIABLE - 保留 - VARIABLES 非保留 - - VARIADIC 保留 - - VARYING 非保留 保留 保留 VCGROUP 非保留 - - VERBOSE 保留(可以是函数或类型) - - VERIFY 保留 - - VERSION 非保留 - - VIEW 非保留 保留 保留 VOLATILE 非保留 - - WAIT 非保留 - - WEAK 非保留 - - WHEN 保留 保留 保留 WHENEVER - 保留 保留 WHERE 保留 保留 保留 WHITESPACE 非保留 - - WINDOW 保留 - - WITH 保留 保留 保留 WITHIN 非保留 - - WITHOUT 非保留 保留 - WORK 非保留 保留 保留 WORKLOAD 非保留 - - WRAPPER 非保留 - - WRITE 非保留 保留 保留 XML 非保留 - - XMLATTRIBUTES 非保留(不能是函数或类型) - - XMLCONCAT 非保留(不能是函数或类型) - - XMLELEMENT 非保留(不能是函数或类型) - - XMLEXISTS 非保留(不能是函数或类型) - - XMLFOREST 非保留(不能是函数或类型) - - XMLPARSE 非保留(不能是函数或类型) - - XMLPI 非保留(不能是函数或类型) - - XMLROOT 非保留(不能是函数或类型) - - XMLSERIALIZE 非保留(不能是函数或类型) - - YEAR 非保留 保留 保留 YES 非保留 - - ZONE 非保留 保留 保留
  • 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 --创建基本表table_for_label。 openGauss=# CREATE TABLE table_for_label(col1 int, col2 text); --创建资源标签table_label。 openGauss=# CREATE RESOURCE LABEL table_label ADD COLUMN(table_for_label.col1); --将col2添加至资源标签table_label中。 openGauss=# ALTER RESOURCE LABEL table_label ADD COLUMN(table_for_label.col2) --将资源标签table_label中的一项移除。 openGauss=# ALTER RESOURCE LABEL table_label REMOVE COLUMN(table_for_label.col1); --删除资源标签table_label。 openGauss=# DROP RESOURCE LABEL table_label; --删除基本表table_for_label。 openGauss=# DROP TABLE table_for_label;
  • MY_CONS_COLUMNS MY_CONS_COLUMNS视图显示当前用户下表中主键约束列的信息。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 MY_CONS_COLUMNS字段 名称 类型 描述 owner character varying(64) 约束创建者。 table_name character varying(64) 约束相关的表名。 column_name character varying(64) 约束相关的列名。 constraint_name character varying(64) 约束名。 position smallint 表中列的位置。 父主题: 系统视图
  • 参数说明 IF EXISTS 如果该操作符不存在,则不会抛出一个错误,而是发出一个提示。 name 一个现存的操作符的名字(可以有模式修饰)。 lefttype 该操作符左操作数的类型,如果没有则写NONE。 righttype 该操作符右操作数的类型,如果没有则写NONE 。 CASCADE 自动删除依赖于该操作符的对象(例如使用它的视图),然后删除所有 依赖于那些对象的对象。 RESTRICT 如果有任何对象依赖于该操作符,则拒绝删除它。这是默认值。
  • 示例:常用操作 import psycopg2 import os # 从环境变量中获取用户名和密码 user = os.getenv('user') password = os.getenv('password') # 创建连接对象 conn=psycopg2.connect(database="database", user=user, password=password, host="localhost", port=port) cur=conn.cursor() #创建指针对象 # 创建连接对象(SSl连接) conn = psycopg2.connect(dbname="database", user=user, password=password, host="localhost", port=port, sslmode="verify-ca", sslcert="client.crt",sslkey="client.key",sslrootcert="cacert.pem") 注意: 如果sslcert、sslkey、sslrootcert没有填写,默认取当前用户.postgresql目录下对应的client.crt、client.key、root.crt # 创建表 cur.execute("CREATE TABLE student(id integer,name varchar,sex varchar);") # 插入数据 cur.execute("INSERT INTO student(id,name,sex) VALUES(%s,%s,%s)",(1,'Aspirin','M')) cur.execute("INSERT INTO student(id,name,sex) VALUES(%s,%s,%s)",(2,'Taxol','F')) cur.execute("INSERT INTO student(id,name,sex) VALUES(%s,%s,%s)",(3,'Dixheral','M')) # 批量插入数据 stus = ((4,'John','M'),(5,'Alice','F'),(6,'Peter','M')) cur.executemany("INSERT INTO student(id,name,sex) VALUES(%s,%s,%s)",stus) # 获取结果 cur.execute('SELECT * FROM student') results=cur.fetchall() print (results) # 提交操作 conn.commit() # 插入一条数据 cur.execute("INSERT INTO student(id,name,sex) VALUES(%s,%s,%s)",(7,'Lucy','F')) # 回退操作 conn.rollback() # 关闭连接 cur.close() conn.close() psycopg2常用连接方式 1. conn = psycopg2.connect(dbname="dbname", user=user, password=password, host="localhost", port=port) 2. conn = psycopg2.connect(f"dbname=dbname user={user} password={password} host=localhost port=port") 3. 使用日志 import logging import psycopg2 from psycopg2.extras import LoggingConnection import os # 从环境变量中获取用户名和密码 user = os.getenv('user') password = os.getenv('password') logging.basicConfig(level=logging.DEBUG) # 日志级别 logger = logging.getLogger(__name__) db_settings = { "user": user, "password": password, "host": "localhost", "database": "dbname", "port": port } # LoggingConnection默认记录所有SQL,可自行实现filter过滤不需要的或敏感的SQL,下面给出了简单的过滤password相关SQL的示例 class SelfLoggingConnection(LoggingConnection): def filter(self, msg, curs): if db_settings['password'] in msg.decode(): return b'queries containing the password will not be recorded' return msg conn = psycopg2.connect(connection_factory=SelfLoggingConnection, **db_settings) conn.initialize(logger) LoggingConnection默认记录所有SQL信息,且不会对敏感信息进行脱敏,可通过filter函数自行定义输出的SQL内容。 日志功能是psycopg2为了方便开发者显性调试全量SQL而提供额外功能,默认情况下不需要使用。该功能会在pyscopg2执行SQL语句前打印SQL语句,但是,需要在debug日志级别下才会输出。该功能不是默认功能,只是在有特殊需要的时候才使用,没有特别需求,不建议使用。详情参考:https://www.psycopg.org/docs/extras.html?highlight=loggingconnection 父主题: 基于Psycopg开发
  • DBE_SQL_UTIL.show_sql_patch show_sql_patch是用于显示给定patch_name对应的SQL PATCH的接口函数,返回运行结果。 限制仅初始用户、sysadmin、opradmin、monadmin用户有权限调用。 表1 DBE_SQL_UTIL.show_sql_patch入参和返回值列表 参数 类型 描述 patch_name IN name PATCH名称。 unique_sql_id OUT bigint 查询全局唯一ID。 enabled OUT bool PATCH是否生效。 abort OUT bool 是否是AbortHint。 hint_str OUT text Hint文本。 父主题: DBE_SQL_UTIL Schema
  • 查看数据库中包含的表 在public Schema下新建五张表: openGauss=# CREATE TABLE public.search_table_t1(a int); CREATE TABLE openGauss=# CREATE TABLE public.search_table_t2(b int); CREATE TABLE openGauss=# CREATE TABLE public.search_table_t3(c int); CREATE TABLE openGauss=# CREATE TABLE public.search_table_t4(d int); CREATE TABLE openGauss=# CREATE TABLE public.search_table_t5(e int); CREATE TABLE 在PG_TABLES系统表中查看public Schema中包含的前缀为search_table的表。 1 openGauss=# SELECT distinct(tablename) FROM pg_tables WHERE SCHEMANAME = 'public' AND TABLENAME LIKE 'search_table%'; 结果类似如下这样: 1 2 3 4 5 6 7 8 tablename ----------------- search_table_t1 search_table_t2 search_table_t3 search_table_t4 search_table_t5 (5 rows)
  • 查看和停止正在运行的查询语句 通过视图PG_STAT_ACTIVITY可以查看正在运行的查询语句。方法如下: 设置参数track_activities为on。 1 SET track_activities = on; 当此参数为on时,数据库系统才会收集当前活动查询的运行信息。 查看正在运行的查询语句。以查看正在运行的查询语句所连接的数据库名、执行查询的用户、查询状态及查询对应的PID为例: 1 SELECT datname, usename, state,pid FROM pg_stat_activity; 1 2 3 4 5 6 7 8 datname | usename | state | pid ----------+---------+--------+----------------- testdb | Ruby | active | 140298793514752 testdb | Ruby | active | 140298718004992 testdb | Ruby | idle | 140298650908416 testdb | Ruby | idle | 140298625742592 testdb | omm | active | 140298575406848 (5 rows) 如果state字段显示为idle,则表明此连接处于空闲,等待用户输入命令。 如果仅需要查看非空闲的查询语句,则使用如下命令查看: 1 SELECT datname, usename, state, pid FROM pg_stat_activity WHERE state != 'idle'; 若需要取消运行时间过长的查询,通过PG_TERMINATE_BACKEND函数,根据线程ID结束会话。 1 SELECT PG_TERMINATE_BACKEND(139834759993104); 显示类似如下信息,表示结束会话成功。 1 2 3 4 PG_TERMINATE_BACKEND ---------------------- t (1 row) 显示类似如下信息,表示用户执行了结束当前会话的操作。 1 2 FATAL: terminating connection due to administrator command FATAL: terminating connection due to administrator command gsql客户端使用PG_TERMINATE_BACKEND函数结束当前会话后台线程时,客户端不会退出而是自动重连。即还会返回“The connection to the server was lost. Attempting reset: Succeeded.” 1 2 3 FATAL: terminating connection due to administrator command FATAL: terminating connection due to administrator command The connection to the server was lost. Attempting reset: Succeeded.
  • 查看数据库用户 通过PG_USER可以查看数据库中所有用户的列表,还可以查看用户ID(USESYSID)和用户权限。 1 SELECT * FROM pg_user; usename | usesysid | usecreatedb | usesuper | usecatupd | userepl | passwd | valbegin | valuntil | respool | parent | spacelimit | useconfig | no degroup | tempspacelimit | spillspacelimit | usemonitoradmin | useoperatoradmin | usepolicyadmin ---------+----------+-------------+----------+-----------+---------+----------+----------+----------+--------------+--------+------------+-----------+--- --------+----------------+-----------------+-----------------+------------------+---------------- omm | 10 | t | t | t | t | ******** | | | default_pool | 0 | | | | | | t | t | t
  • 注意事项 逻辑解码不支持DDL。 在执行特定的DDL语句(如普通表truncate或分区表exchange)时,可能造成解码数据丢失。 不支持数据页复制的DML解码。 当执行DDL语句(如alter table)后,该DDL语句前尚未解码的物理日志可能会丢失。 单条元组大小不超过1GB,考虑解码结果可能大于插入数据,因此建议单条元组大小不超过500MB。 GaussDB支持解码的数据类型为:INTEGER、BIGINT、SMALLINT、TINYINT、SERIAL、SMALLSERIAL、BIGSERIAL、FLOAT、DOUBLE PRECISION、DATE、TIME[WITHOUT TIME ZONE]、TIMESTAMP[WITHOUT TIME ZONE]、CHAR(n)、VARCHAR(n)、TEXT。 逻辑复制槽名称必须小于64个字符,仅支持小写字母、数字以及_?-.字符,且不支持“.”或“..”单独作为复制槽名称。 当逻辑复制槽所在数据库被删除后,这些复制槽变为不可用状态,需要用户手动删除。 对多库的解码需要分别在库内创建流复制槽并开始解码,每个库的解码都需要单独扫一遍日志。 不支持强切,强切后需要重新全量导出数据。 如需进行备机解码,需在对应主机上设置guc参数enable_slot_log = on。 备机解码时,switchover和failover时可能出现解码数据变多,需用户手动过滤。Quorum协议下,switchover和failover选择升主的备机,需要与当前主机日志同步。 不允许主备,多个备机同时使用同一个复制槽解码,否则会产生数据不一致。 只支持主机创建删除复制槽。 数据库故障重启或逻辑复制进程重启后,解码数据可能存在重复,用户需自己过滤。 计算机内核故障后,解码可能存在乱码,需手动或自动过滤。 当前备机逻辑解码,不支持开启极致RTO。 请确保在创建逻辑复制槽过程中长事务未启动,启动长事务会阻塞逻辑复制槽的创建。 不支持interval partition表复制。 不支持全局临时表的DML解码。 在事务中执行DDL语句后,该DDL语句与之后的语句不会被解码。 禁止在使用逻辑复制槽时在其他节点对该复制槽进行操作,删除复制槽的操作需在该复制槽停止解码后执行。 为解析某个astore表的UPDATE和DELETE语句,需为此表配置REPLICA IDENITY属性,在此表无主键时需要配置为FULL。 禁止在使用逻辑复制槽时在其他节点对该复制槽进行操作,删除复制槽的操作需在该复制槽停止解码后执行。 基于目标库可能需要源库的系统状态信息考虑,逻辑解码仅自动过滤模式'pg_catalog'和'pg_toast'下OID小于16384的系统表的逻辑日志。若目标库不需要复制其他相关系统表的内容,逻辑日志回放过程中需要对相关系统表进行过滤。 在开启逻辑复制的场景下,如需创建包含系统列的主键索引,必须将该表的REPLICA IDENTITY属性设置为FULL或是使用USING INDEX指定不包含系统列的、唯一的、非局部的、不可延迟的、仅包括标记为NOT NULL的列的索引。 在逻辑复制槽使用完毕后,需及时删除,否则会阻塞xLog日志回收。 若一个事务的子事务过多导致落盘文件过多,退出解码时需执行SQL函数pg_terminate_backend(逻辑解码的walsender线程id)来手动停止解码,而且退出时延增加约为1分钟/30万个子事务。因此在开启逻辑解码时,若一个事务的子事务数量达到5万时,会打印一条WARNING日志。 当同一事务产生大量需要落盘的子事务时,同时打开的文件句柄可能会超限,需将GUC参数max_files_per_process配置成大于子事务数量上限的两倍。
  • SQL函数解码性能 在Benchmarksql-5.0的100warehouse场景下,采用pg_logical_slot_get_changes时: 单次解码数据量4K行(对应约5MB~10MB日志),解码性能0.3MB/s~0.5 MB/s。 单次解码数据量32K行(对应约40MB~80MB日志),解码性能3MB/s~5MB/s。 单次解码数据量256K行(对应约320MB~640MB日志),解码性能3MB/s~5MB/s。 单次解码数据量再增大,解码性能无明显提升。 如果采用pg_logical_slot_peek_changes + pg_replication_slot_advance方式,解码性能相比采用pg_logical_slot_get_changes时要下降30%~50%。
  • 使用分区表 分区表是把逻辑上的一张表根据某种方案分成几张物理块进行存储。这张逻辑上的表称之为分区表,物理块称之为分区。分区表是一张逻辑表,不存储数据,数据实际是存储在分区上的。分区表和普通表相比具有以下优点: 改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索效率。 增强可用性:如果分区表的某个分区出现故障,表在其他分区的数据仍然可用。 方便维护:如果分区表的某个分区出现故障,需要修复数据,只修复该分区即可。 GaussDB支持的分区表为一级分区表和二级分区表,其中一级分区表包括范围分区表、间隔分区表、列表分区表、哈希分区表四种,二级分区表包括范围分区、列表分区、哈希分区两两组合的九种。 范围分区表:将数据基于范围映射到每一个分区。这个范围是由创建分区表时指定的分区键决定的。分区键经常采用日期,例如将销售数据按照月份进行分区。 间隔分区表:是一种特殊的范围分区表,相比范围分区表,新增间隔值定义,当插入记录找不到匹配的分区时,可以根据间隔值自动创建分区。 列表分区表:将数据中包含的键值分别存储在不同的分区中,依次将数据映射到每一个分区,分区中包含的键值由创建分区表时指定。 哈希分区表:将数据根据内部哈希算法依次映射到每一个分区中,包含的分区个数由创建分区表时指定。 二级分区表:由范围分区、列表分区、哈希分区任意组合得到的分区表,其一级分区和二级分区均可以使用前面三种定义方式。 父主题: 审视和修改表定义
  • DBE_PLDEBUGGER.backtrace debug端调试过程中,调用backtrace,查看当前的调用堆栈。 表1 backtrace返回值列表 名称 类型 描述 frameno OUT integer 调用栈编号 funcname OUT text 函数名 lineno OUT integer 行号 query OUT text 断点内容 funcoid OUT oid 函数oid 父主题: DBE_PLDEBUGGER Schema
  • PG_STAT_USER_INDEXES PG_STAT_USER_INDEXES视图显示数据库中用户自定义普通表和toast表的索引状态信息。 表1 PG_STAT_USER_INDEXES字段 名称 类型 描述 relid oid 该索引所在的表的OID。 indexrelid oid 索引的OID。 schemaname name 索引的模式名。 relname name 索引的表名。 indexrelname name 索引名。 idx_scan bigint 索引上开始的索引扫描数。 idx_tup_read bigint 该索引上扫描返回的索引项数。 idx_tup_fetch bigint 使用该索引的简单索引扫描在原表中抓取的活表行数。 父主题: 系统视图
  • PG_USER_MAPPING PG_USER_MAPPING系统表存储从本地用户到远程的映射。 需要有系统管理员权限才可以访问此系统表。普通用户可以使用视图PG_USER_MAPPINGS进行查询。 表1 PG_USER_MAPPING字段 名称 类型 引用 描述 oid oid - 行标识符(隐含属性,必须明确选择)。 umuser oid PG_AUTHID.oid 被映射的本地用户的OID,如果用户映射是公共的则为0。 umserver oid PG_FOREIGN_SERVER.oid 包含这个映射的外部服务器的OID。 umoptions text[] - 用户映射指定选项,使用“keyword=value”格式的字符串。 父主题: 系统表
  • 数据损坏检测修复函数 gs_verify_data_file(verify_segment bool) 描述:校验当前实例当前库是否存在文件丢失的情况。校验只包括数据表主文件是否有中间段丢失的情况。默认参数是false,表示不校验段页式表数据文件。参数设置为true时仅校验段页式表文件。默认只有初始用户、具有sysadmin属性的用户以及在运维模式下具有运维管理员属性的用户可以查看,其余用户需要赋权后才可以使用。 返回的结果: 非段页式表:rel_oid和rel_name是对应文件的表oid和表名,miss_file_path表示丢失文件的相对路径。 段页式表:因所有表存放在相同文件中,所以rel_oid和rel_name无法显示具体表的信息。对于段页式表,如果第一个文件损坏,不会检查出后面的.1 .2等文件。例如3、3.1、3.2损坏,只能检查出3损坏。当段页式文件不足5个时,使用函数检测时,未生成的文件也会校验出来,例如只有1和2文件,校验段页式时,也会检测出3,4,5文件。以下示例,第一个是校验非段页式表的示例,第二是校验段页式表的示例。 参数说明: verify_segment 指定文件校验的范围。false校验非段页式表;true校验段页式表。 取值范围:true和false,默认是false。 返回值类型:record。 示例(仅当发现有异常时才会输出异常行,否则输出0行): 校验非段页式表 openGauss=# select * from gs_verify_data_file(); node_name | rel_oid | rel_name | miss_file_path ------------------+---------+--------------+------------------ dn_6001_6002_6003 | 16554 | test | base/16552/24745 校验段页式表 openGauss=# select * from gs_verify_data_file(true); node_name | rel_oid | rel_name | miss_file_path -------------------+---------+----------+---------------- dn_6001_6002_6003 | 0 | none | base/16573/2 gs_repair_file(tableoid Oid, path text, timeout int) 描述:根据传入的参数修复文件,仅支持有正常主备连接的主DN使用。参数依据gs_verify_data_file函数返回的oid和路径填写。段页式表tableoid赋值为0到4,294,967,295的任意值(内部校验根据文件路径判断是否是段页式表文件,段页式表文件则不使用tableoid)。修复成功返回值为true,修复失败会显示具体失败原因。默认只有在主DN节点上,使用初始用户、具有sysadmin属性的用户以及在运维模式下具有运维管理员属性的用户可以查看,其余用户需要赋权后才可以使用。 当DN实例上存在文件损坏时,进行升主会校验出错,报PANIC退出无法升主,为正常现象。 当文件存在但是大小为0时,此时不会去修复该文件,若想要修复该文件,需要将为0的文件删除后再修复。 删除文件需要等文件fd自动关闭后再修复,人工操作可以执行重启进程、主备切换命令。 参数说明: tableoid 要修复的文件对应的表oid,依据gs_verify_data_file函数返回的列表中rel_oid一列填写。 取值范围: Oid,0 - 4294967295。注意:输入负值等都会被强制转成非负整数类型。 path 需要修复的文件路径,依据gs_verify_data_file函数返回的列表中miss_file_path一列填写。 取值范围:字符串。 timeout 等待备DN回放的时长,修复文件需要等待备DN回放到当前主DN对应的位置,根据备DN回放所需时长设定。 取值范围:60s - 3600s。 返回值类型:bool。 示例(按照gs_verify_data_file的输出填写tableoid和path): openGauss=# select * from gs_repair_file(16554,'base/16552/24745',360); gs_repair_file ---------------- t local_bad_block_info() 描述:显示本实例页面损坏的情况。从磁盘读取页面,发现页面CRC校验失败时进行记录。默认只有初始化用户、具有sysadmin属性的用户、具有监控管理员属性的用户以及在运维模式下具有运维管理员属性的用户、以及监控用户可以查看,其余用户需要赋权后才可以使用。 显示信息:file_path是损坏文件的相对路径,如果是段页式表,则显示的是逻辑信息,不是实际的物理文件信息。block_num是该文件损坏的具体页面号,页面号从0开始。check_time表示发现页面损坏的时间。repair_time表示修复页面的时间。 返回值类型:record。 示例(仅当有损坏记录时输出相关条目,否则输出0行。): openGauss=# select * from local_bad_block_info(); node_name | spc_node | db_node | rel_node| bucket_node | fork_num | block_num | file_path | check_time | repair_time -----------------+-------+--------+--------+--------------+----------+-----------+-----------------+--------------------------+------------------------------- dn_6001_6002_6003| 1663 | 16552 | 24745 | -1 | 0 | 0 | base/16552/24745 | 2022-01-13 20:19:08.385004+08 | 2022-01-13 20:19:08.407314+08 local_clear_bad_block_info() 描述:清理local_bad_block_info中已修复页面的数据,也就是repair_time不为空的信息。默认只有初始化用户、具有sysadmin属性的用户以及在运维模式下具有运维管理员属性的用户、以及监控用户可以查看,其余用户需要赋权后才可以使用。 返回值类型:bool。 示例: openGauss=# select * from local_clear_bad_block_info(); result -------- t gs_verify_and_tryrepair_page (path text, blocknum oid, verify_mem bool, is_segment bool) 描述:校验本实例指定页面的情况。默认只有在主DN节点上,使用初始化用户、具有sysadmin属性的用户以及在运维模式下具有运维管理员属性的用户可以查看,其余用户需要赋权后才可以使用。 返回的结果信息:disk_page_res表示磁盘上页面的校验结果;mem_page_res表示内存中页面的校验结果;is_repair表示在校验的过程中是否触发修复功能,t表示已修复,f表示未修复。 注意: 1. 当DN实例上存在页面损坏时,进行升主会校验出错,报PANIC退出无法升主,为正常现象。不支持hashbucket表页面损坏的修复。 2. 此函数触发的修复仅支持修复内存中的页面,需要在内存页面落盘后物理页面修复才能正式生效。 参数说明: path 损坏文件的路径。依据local_bad_block_info中file_path一列填写。如果要对存储类型为USTORE的表进行UNDO页面校验,请直接填写需要校验的UNDO页面路径。 取值范围:字符串。 blocknum 损坏文件的页号。依据local_bad_block_info中block_num一列填写。如果要对存储类型为USTORE的表进行UNDO页面校验,请直接填写需要校验的UNDO页面的块号。 取值范围:Oid,0 - 4294967295。注意:输入负值等都会被强制转成非负整数类型。 verify_mem 指定是否校验内存中的指定页面。设定为false时,只校验磁盘上的页面。设置为true时,校验内存中的页面和磁盘上的页面。如果发现磁盘上页面损坏,会将内存中的页面做一个基本信息校验刷盘,修复磁盘上页面。如果校验内存页面时发现页面不在内存中,会经内存接口读取磁盘上的页面。此过程中如果磁盘页面有问题,则会触发远程读自动修复功能。 取值范围:bool,true和false。 is_segment 是否是段页式表。根据local_bad_block_info中的bucket_node列值决定。如果bucket_node为-1时,表示不是段页式表,将is_segment设置为false;非-1的情况将is_segment设置为true。 取值范围:bool,true和false。 返回值类型:record。 示例(请依据local_bad_block_info的输出传参,否则报错): openGauss=# select * from gs_verify_and_tryrepair_page('base/16552/24745',0,false,false); node_name | path | blocknum | disk_page_res | mem_page_res | is_repair ------------------+------------------+------------+-----------------------------+---------------+---------- dn_6001_6002_6003 | base/16552/24745 | 0 | page verification succeeded.| | f gs_repair_page(path text, blocknum oid, is_segment bool, timeout int) 描述:修复本实例指定页面,仅支持有正常主备连接的主DN使用。页面修复成功返回true,修复过程中出错会有报错信息提示。默认只有在主DN节点上,使用初始化用户、具有sysadmin属性的用户以及在运维模式下具有运维管理员属性的用户可以查看,其余用户需要赋权后才可以使用。 注意:当DN实例上存在页面损坏时,进行升主会校验出错,报PANIC退出无法升主,为正常现象。不支持hashbucket表页面损坏的修复。 参数说明: path 损坏页面的路径。根据local_bad_block_info中file_path一列设置,或者是gs_verify_and_tryrepair_page函数中path一列设置。 取值范围:字符串。 blocknum 损坏页面的页面号。根据local_bad_block_info中block_num一列设置,或者是gs_verify_and_tryrepair_page函数中blocknum一列设置。 取值范围:Oid,0 - 4294967295。注意:输入负值等都会被强制转成非负整数类型。 is_segment 是否是段页式表。根据local_bad_block_info中的bucket_node列值决定,如果bucket_node为-1时,表示不是段页式表,将is_segment设置为false;非-1的情况将is_segment设置为true。 取值范围:bool,true或者false。 timeout 等待备DN回放的时长。修复页面需要等待备DN回放到当前主DN对应的位置,根据备DN回放所需时长设定。 取值范围:60s - 3600s。 返回值类型:bool。 示例(请根据local_bad_block_info的输出传参,否则报错): openGauss=# select * from gs_repair_page('base/16552/24745',0,false,60); result -------- t gs_verify_urq(index_oid oid, queue_type text, blocknum bigint, verify_type text) 描述:校验索引回收队列的正确性或校验回收队列取索引页性能。 参数说明:详见表1。 返回值类型:record。 表1 gs_verify_urq参数说明 参数类型 参数名 类型 描述 输入参数 index_oid oid UBTree索引oid。 输入参数 queue_type text 队列类型: empty queue:潜在队列。 free queue:可用队列。 single page:队列单页面。 输入参数 blocknum bigint 页面号。 队列类型为single page时,校验单个页面blocknum的所有元组。取值范围为[0, 队列文件大小/8192)。 队列类型为empty queue或free queue时,blocknum不等于0校验这个队列所有页面的所有元组,blocknum=0不校验页面元组。 输入参数 verify_type text 验证类型。 physics:校验队列物理结构。 performance:校验从回收队列取页面的性能。 输出参数 verify_code text 错误码。 输出参数 detail text 具体报错描述。 示例: openGauss=# select * from gs_verify_urq(16387,'free queue',1,'physics'); verify_code | detail -------------+-------- 该接口当前仅支持USTORE索引表,暂不支持分区Local索引。 gs_repair_urq(index_oid oid) 描述:重建索引回收队列(潜在队列和可用队列)。修复成功显示reinitial the recycle queue of index relation successfully。 参数说明:index_oid(ubtree索引oid)。 返回值类型:text。 备注:当前函数仅支持在主节点进行调用。 示例: openGauss=# select * from gs_repair_urq(16387); result ------------------------------------------------------------ reinitial the recycle queue of index relation successfully. 该接口当前仅支持USTORE索引表,暂不支持分区Local索引。 父主题: 函数和操作符
  • 语法格式 查询数据 [ WITH [ RECURSIVE ] with_query [, ...] ] SELECT [/*+ plan_hint */] [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] { * | {expression [ [ AS ] output_name ]} [, ...] } [ FROM from_item [, ...] ] [ WHERE condition ] [ [ START WITH condition ] CONNECT BY [NOCYCLE] condition [ ORDER SIBLINGS BY expression ] ] [ GROUP BY grouping_element [, ...] ] [ HAVING condition [, ...] ] [ WINDOW {window_name AS ( window_definition )} [, ...] ] [ { UNION | INTERSECT | EXCEPT | MINUS } [ ALL | DISTINCT ] select ] [ ORDER BY {expression [ [ ASC | DESC | USING operator ] | nlssort_expression_clause ] [ NULLS { FIRST | LAST } ]} [, ...] ] [ LIMIT { [offset,] count | ALL } ] [ OFFSET start [ ROW | ROWS ] ] [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ] [ {FOR { UPDATE | NO KEY UPDATE | SHARE | KEY SHARE } [ OF table_name [, ...] ] [ NOWAIT | WAIT n ]} [...] ]; TABLE { ONLY {(table_name)| table_name} | table_name [ * ]}; condition和expression中可以使用targetlist中表达式的别名。 只能同一层引用。 只能引用targetlist中的别名。 只能是后面的表达式引用前面的表达式。 不能包含volatile函数。 不能包含Window function函数。 不支持在JOIN ON条件中引用别名。 targetlist中有多个要应用的别名则报错。 其中子查询with_query为: with_query_name [ ( column_name [, ...] ) ] AS [ [ NOT ] MATERIALIZED ] ( {select | values | insert | update | delete} ) 其中指定查询源from_item为: {[ ONLY ] table_name [ * ] [ partition_clause ] [ [ AS ] alias [ ( column_alias [, ...] ) ] ] [ TABLESAMPLE sampling_method ( argument [, ...] ) [ REPEATABLE ( seed ) ] ] [ TIMECAPSULE {TIMESTAMP | CSN} expression ] |( select ) [ AS ] alias [ ( column_alias [, ...] ) ] |with_query_name [ [ AS ] alias [ ( column_alias [, ...] ) ] ] |function_name ( [ argument [, ...] ] ) [ AS ] alias [ ( column_alias [, ...] | column_definition [, ...] ) ] |function_name ( [ argument [, ...] ] ) AS ( column_definition [, ...] ) |from_item [ NATURAL ] join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ]} 其中group子句为: ( ) | expression | ( expression [, ...] ) | ROLLUP ( { expression | ( expression [, ...] ) } [, ...] ) | CUBE ( { expression | ( expression [, ...] ) } [, ...] ) | GROUPING SETS ( grouping_element [, ...] ) from_item中指定分区partition_clause为: PARTITION { ( partition_name ) | FOR ( partition_value [, ...] ) } | SUBPARTITION { ( subpartition_name ) | FOR ( subpartition_value [, ...] )} 指定分区只适合分区表。 其中设置排序方式nlssort_expression_clause为: NLSSORT ( column_name, ' NLS_SORT = { SCHINESE_PINYIN_M | generic_m_ci } ' ) 第二个参数可选generic_m_ci,仅支持纯英文不区分大小写排序。 简化版查询语法,功能相当于SELECT * FROM table_name。 TABLE { ONLY {(table_name)| table_name} | table_name [ * ]};
  • MY_SYNONYMS MY_SYNONYMS视图显示当前用户可访问的同义词的信息。 表1 MY_SYNONYMS字段 名称 类型 描述 schema_name text 同义词所属模式名。 synonym_name text 同义词的名称。 table_owner text 关联对象的所有者。尽管该列称为table_owner,但它拥有的该关联对象不一定是表,可以是任何数据库通用对象,例如视图、存储过程、同义词等。 table_name text 关联对象名。尽管该列称为table_name,但此关联对象不一定是表,可以是任何数据库通用对象,例如视图、存储过程、同义词等。 table_schema_name text 关联对象所属模式名。尽管该列称为table_schema_name,但此schema下的该关联对象不一定是表,可以是任何数据库通用对象,例如视图、存储过程、同义词等。 父主题: 系统视图
  • 选择数据类型 高效数据类型,主要包括以下三方面: 尽量使用执行效率比较高的数据类型 一般来说整型数据运算(包括=、>、<、≧、≦、≠等常规的比较运算,以及group by)的效率比字符串、浮点数要高。 尽量使用短字段的数据类型 长度较短的数据类型不仅可以减小数据文件的大小,提升I/O性能;同时也可以减小相关计算时的内存消耗,提升计算性能。比如对于整型数据,如果可以用smallint就尽量不用int,如果可以用int就尽量不用bigint。 使用一致的数据类型 表关联列尽量使用相同的数据类型。如果表关联列数据类型不同,数据库必须动态地转化为相同的数据类型进行比较,这种转换会带来一定的性能开销。 父主题: 表设计最佳实践
  • PG_PLTEMPLATE PG_PLTEMPLATE系统表存储过程语言的“模板”信息。 表1 PG_PLTEMPLATE字段 名称 类型 描述 tmplname name 这个模板所应用的语言的名称。 tmpltrusted boolean 如果语言被认为是可信的,则为真。否则为假。 tmpldbacreate boolean 如果语言是由数据库所有者创建的,则为真。否则为假。 tmplhandler text 调用处理器函数的名称。 tmplinline text 匿名块处理器的名称,若没有则为NULL。 tmplvalidator text 校验函数的名称,如果没有则为NULL。 tmpllibrary text 实现语言的共享库的路径。 tmplacl aclitem[] 模板的访问权限(未使用)。 父主题: 系统表
共100000条