华为云用户手册

  • 示例 示例1:连接数据库 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 30 31 32 33 34 //以下代码将获取数据库连接操作封装为一个接口,可通过给定用户名和密码来连接数据库。 public static Connection getConnect(String username, String passwd) { //驱动类。 String driver = "org.postgresql.Driver"; //数据库连接描述符。 String sourceURL = "jdbc:postgresql://$ip:$port/postgres"; Connection conn = null; try { //加载驱动。 Class.forName(driver); } catch( Exception e ) { e.printStackTrace(); return null; } try { //创建连接。 conn = DriverManager.getConnection(sourceURL, username, passwd); System.out.println("Connection succeed!"); } catch(Exception e) { e.printStackTrace(); return null; } return conn; } 示例2:使用Properties对象作为参数建立连接 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 30 31 32 33 34 35 36 37 // 以下代码将使用Properties对象作为参数建立连接 public static Connection getConnectUseProp(String username, String passwd) { //驱动类。 String driver = "org.postgresql.Driver"; //数据库连接描述符。 String sourceURL = "jdbc:postgresql://$ip:$port/postgres"; Connection conn = null; Properties info = new Properties(); try { //加载驱动。 Class.forName(driver); } catch( Exception e ) { e.printStackTrace(); return null; } try { info.setProperty("user", username); info.setProperty("password", passwd); //创建连接。 conn = DriverManager.getConnection(sourceURL, info); System.out.println("Connection succeed!"); } catch(Exception e) { e.printStackTrace(); return null; } return conn; } 常用参数详情请参见JDBC常用参数参考。
  • 参数 表1 数据库连接参数 参数 描述 url postgresql.jar数据库连接描述符。格式如下: jdbc:postgresql:database jdbc:postgresql://host/database jdbc:postgresql://host:port/database jdbc:postgresql://host:port/database?param1=value1¶m2=value2 jdbc:postgresql://host1:port1,host2:port2/database?param1=value1¶m2=value2 说明: database为要连接的数据库名称。 host为数据库服务器名称或IP地址。 由于安全原因,数据库主节点禁止数据库内部其他节点无认证接入。如果要在数据库内部访问数据库主节点,请将JDBC程序部署在数据库主节点所在机器,host使用“127.0.0.1”。否则可能会出现“FATAL: Forbid remote connection with trust method!”错误。 建议业务系统单独部署在数据库外部,否则可能会影响数据库运行性能。 缺省情况下,连接服务器为localhost。 port为数据库服务器端口。 缺省情况下,会尝试连接到5431端口的database。 param为参数名称,即数据库连接属性。 参数可以配置在URL中,以“?”开始配置,以“=”给参数赋值,以“&”作为不同参数的间隔。也可以采用info对象的属性方式进行配置,详情见示例。 value为参数值,即数据库连接属性值。 连接时需配置connectTimeout、socketTimeout,如果未配置,默认为0,即不会超时。在DN与客户端出现网络故障时,客户端一直未收到DN侧ACK确认报文,会启动超时重传机制,不断的进行重传。当超时时间达到系统默认的600s后才会报超时错误,这会导致RTO时间较高。 info 数据库连接属性(所有属性大小写敏感)。常用的属性如下: PGDBNAME:String类型。表示数据库名称(URL中无需配置该参数,自动从URL中解析)。 PGHOST:String类型。主机IP地址。详情见示例。 PGPORT:Integer类型。主机端口号。详情见示例。 user:String类型。表示创建连接的数据库用户。 password:String类型。表示数据库用户的密码。 enable_ce:String类型。其中enable_ce=1表示JDBC支持密态等值查询基本能力。 refreshClientEncryption:String类型。其中refreshClientEncryption=1表示密态数据库支持客户端缓存刷新(默认值为1)。 loggerLevel:String类型。目前支持3种级别:OFF、DEBUG、TRACE。设置为OFF关闭日志,设置为DEBUG和TRACE记录的日志信息详细程度不同。 loggerFile:String类型。Logger输出的文件名。需要显示指定日志文件名,若未指定目录则生成在客户端运行程序目录。此参数已废弃,不再生效,如需使用可通过 java.util.logging 属性文件或系统属性进行配置。 allowEncodingChanges:Boolean类型。设置该参数值为“true”进行字符集类型更改,配合characterEncoding=CHARSET设置字符集,二者使用“&”分隔。characterEncoding取值范围为UTF8、GBK、LATIN1、GB18030,缺省值为false。 说明: 当连接到字符集为GB18030_2022的数据库时,characterEncoding设置为GB18030_2022不生效,会默认使用UTF8,需要设置为GB18030才能正常解析服务端的GB18030_2022字符。 currentSchema:String类型。在search-path中指定要设置的Schema。如果Schema名包含除字母、数字、下划线之外的特殊字符,建议在Schema名上加引号,注意加引号后Schema名大小写敏感。如需配置多个Schema,要用“,”进行分隔,包含特殊字符的Schema也需要加引号处理。 例如:currentSchema=schema_a、"schema-b"、"schema/c"。 hostRecheckSeconds:Integer类型。JDBC尝试连接主机后会保存主机状态:连接成功或连接失败。在hostRecheckSeconds时间内保持可信,超过则状态失效。缺省值是10秒。 ssl:Boolean类型。以SSL方式连接。 ssl=true可支持NonValidatingFactory通道和使用证书的方式: 1、NonValidatingFactory通道需要配置用户名和密码,同时将SSL设置为true。 2、配置客户端证书、密钥、根证书,将SSL设置为true。 sslmode:String类型。SSL认证方式。取值范围为:disable、allow、prefer、require、verify-ca、verify-full。 disable:不使用SSL安全连接。 allow:如果数据库服务器要求使用,则可以使用SSL安全加密连接,但不验证数据库服务器的真实性。 prefer:如果数据库支持,那么首选使用SSL连接,但不验证数据库服务器的真实性。 require只尝试SSL连接,如果存在CA文件,则应设置成verify-ca的方式验证。 verify-ca只尝试SSL连接,并且验证服务器是否具有由可信任的证书机构签发的证书。 verify-full只尝试SSL连接,并且验证服务器是否具有由可信任的证书机构签发的证书,以及验证服务器主机名是否与证书中的一致。 sslcert:String类型。提供证书文件的完整路径。客户端和服务端证书的类型为End Entity。 sslkey:String类型。提供密钥文件的完整路径。使用时将客户端证书转换为DER格式。 openssl pkcs8 -topk8 -outform DER -in client.key -out client.key.pk8 -nocrypt sslrootcert:String类型。SSL根证书的文件名。根证书的类型为CA。 sslpassword:String类型。提供给ConsoleCallbackHandler使用。 sslpasswordcallback:String类型。SSL密码提供者的类名。缺省值:org.postgresql.ssl.jdbc4.LibPQFactory.ConsoleCallbackHandler。 sslfactory:String类型。提供的值是SSLSocketFactory在建立SSL连接时用的类名。 sslfactoryarg:String类型。此值是sslfactory类的构造函数的可选参数(不推荐使用)。 sslhostnameverifier:String类型。主机名验证程序的类名。接口实现javax.net.ssl.HostnameVerifier,默认使用org.postgresql.ssl.PGjdbcHostnameVerifier。 loginTimeout:Integer类型。指建立数据库连接的等待时间。超时时间单位为秒。当url配置多IP时,若获取连接花费的时间超过此值,则连接失败,不再尝试后续IP,缺省值为0。 connectTimeout:Integer类型。用于连接服务器操作的超时值。如果连接到服务器花费的时间超过此值,则连接断开。超时时间单位为秒,值为0时表示已禁用,timeout不生效。当url配置多IP时,表示连接单个IP的超时时间,缺省值为0。 socketTimeout:Integer类型。用于socket读取操作的超时值。如果从服务器读取所花费的时间超过此值,则连接关闭。超时时间单位为秒,值为0时表示已禁用,timeout不生效,缺省值为0。 socketTimeoutInConnecting:Integer类型。用于控制建连阶段socket读取操作的超时值。如果建连时从服务器读取所花费的时间超过此值,则查找下一个节点建连。超时时间单位为秒,默认为5s。 statementTimeout:Integer类型。用于控制connection中statement执行时间的超时值。如果statement执行时间超过此值,则取消该statement执行。超时时间单位为毫秒,值为0表示已禁用,timeout不生效,缺省值为0。 driverInfoMode:String类型。用于控制驱动描述信息的输出模式。取值范围为postgresql、gaussdb,默认缺省值为postgresql,输出postgresql相关的驱动描述信息;设置为gaussdb时输出gaussdb相关的驱动描述信息。 cancelSignalTimeout:Integer类型。发送取消消息本身可能会阻塞,此属性控制用于取消命令的“connect超时”和“socket超时”。超时时间单位为秒,默认值为10秒。 tcpKeepAlive:Boolean类型。启用或禁用TCP保活探测功能。默认为false。 logUnclosedConnections:Boolean类型。客户端可能由于未调用Connection对象的close()方法而泄漏Connection对象。最终这些对象将被垃圾回收,并且调用finalize()方法。如果调用者忽略了此操作,该方法将关闭Connection,缺省值为false。 assumeMinServerVersion:String类型。客户端会发送请求进行float精度设置。该参数设置要连接的服务器版本,如assumeMinServerVersion=9.0,可以在建立时减少相关包的发送。 ApplicationName:String类型。设置正在使用连接的JDBC驱动的名称。通过在数据库主节点上查询pg_stat_activity表可以看到正在连接的客户端信息,JDBC驱动名称显示在application_name列。缺省值为PostgreSQL JDBC Driver。 connectionExtraInfo:Boolean类型。表示驱动是否上报当前驱动的部署路径、进程属主用户到数据库。 取值范围:true或false,默认值为false。设置connectionExtraInfo为true,JDBC驱动会将当前驱动的部署路径、进程属主用户、url连接配置信息上报到数据库中,记录在connection_info参数里,同时可以在PG_STAT_ACTIVITY中查询到。 autosave:String类型。共有3种:"always"、"never"、"conservative"。如果查询失败,指定驱动程序应该执行的操作。在autosave=always模式下,JDBC驱动程序在每次查询之前设置一个保存点,并在失败时回滚到该保存点。在autosave=never模式(默认)下,无保存点。在autosave=conservative模式下,每次查询都会设置保存点,但是只会在“statement XXX无效”等情况下回滚并重试,缺省值为never。 protocolVersion:Integer类型。连接协议版本号,目前仅支持1和3。设置1时仅代表连接的是V1服务端。设置3时将采用MD5加密方式,需要同步修改数据库的加密方式,将GUC参数password_encryption_type设置为1,重启数据库生效后需要创建用MD5方式加密口令的用户。同时修改pg_hba.conf,将客户端连接方式修改为MD5,用新建用户进行登录(不推荐)。 说明: MD5加密算法安全性低,存在安全风险,建议使用更安全的加密算法。 prepareThreshold:Integer类型。控制parse语句何时发送。默认值是5。第一次parse一个SQL比较慢,后面再parse就会比较快,因为有缓存了。如果一个会话连续多次执行同一个SQL,在达到prepareThreshold次数以上时,JDBC将不再对这个SQL发送parse命令。 preparedStatementCacheQueries:Integer类型。确定每个连接中缓存的查询数,默认情况下是256。若在prepareStatement()调用中使用超过256个不同的查询,则最近最少使用的查询缓存将被丢弃。“0”表示禁用缓存。 preparedStatementCacheSizeMiB:Integer类型。确定每个连接可缓存的最大值(以兆字节为单位),默认情况下是5。若缓存了超过5MB的查询,则最近最少使用的查询缓存将被丢弃。“0”表示禁用缓存。 databaseMetadataCacheFields:Integer类型。默认值是65536。指定每个连接可缓存的最大值。“0”表示禁用缓存。 databaseMetadataCacheFieldsMiB:Integer类型。默认值是5。每个连接可缓存的最大值,单位是MB。“0”表示禁用缓存。 stringtype:String类型。可选字段为:false、"unspecified"、"varchar"。设置通过setString()方法使用的PreparedStatement参数的类型,如果stringtype设置为VARCHAR(默认值),则这些参数将作为varchar参数发送给服务器。若stringtype设置为unspecified,则参数将作为untyped值发送到服务器,服务器将尝试推断适当的类型。 batchMode:String类型。用于确定是否使用batch模式连接。默认值为on,表示开启batch模式。设置batchMode=on执行成功的返回结果为[count, 0, 0...0],数组第一个元素为批量影响的总条数;设置batchMode=off执行成功的返回结果为[1, 1, 1...1],数组各元素对应单次修改的影响条数。 fetchsize:Integer类型。用于设置数据库连接所创建statement的默认fetchsize。默认值为0,表示一次获取所有结果。与defaultRowFetchSize等价。 reWriteBatchedInserts:Boolean类型。批量导入时,该参数设置为true,可将N条插入语句合并为一条:insert into TABLE_NAME values(values1, ..., valuesN), ..., (values1, ..., valuesN);使用该参数时,需设置batchMode=off,缺省值为false。 unknownLength:Integer类型。默认为Integer.MAX_VALUE。某些postgresql类型(例如TEXT)没有明确定义的长度,当通过ResultSetMetaData.getColumnDisplaySize和ResultSetMetaData.getPrecision等函数返回关于这些类型的数据时,此参数指定未知长度类型的长度。 uppercaseAttributeName:Boolean类型。默认值为false不开启,为true时开启。该参数开启后会将获取元数据的接口的查询结果转为大写。适用场景为数据库中存储元数据全为小写,但要使用大写的元数据作为出参和入参。 涉及到的接口请参见:java.sql.DatabaseMetaData、java.sql.ResultSetMetaData defaultRowFetchSize:Integer类型。确定一次fetch在ResultSet中读取的行数。限制每次访问数据库时读取的行数可以避免不必要的内存消耗,从而避免OutOfMemoryException。缺省值是0,意味着ResultSet中将一次获取所有行。本参数不允许设置为负值。 binaryTransfer:Boolean类型。使用二进制格式发送和接收数据,默认值为“false”。 binaryTransferEnable:String类型。启用二进制传输的类型列表,以逗号分隔。OID编号和名称二选一,例如binaryTransferEnable=Integer4_ARRAY,Integer8_ARRAY。 比如:OID名称为BLOB,编号为88,可以如下配置: binaryTransferEnable=BLOB 或 binaryTransferEnable=88 binaryTransferDisEnable:String类型。禁用二进制传输的类型列表,以逗号分隔。OID编号和名称二选一。覆盖binaryTransferEnable的设置。 blobMode:String类型。用于设置setBinaryStream方法为不同类型的数据赋值,设置为on时表示为blob类型数据赋值,设置为off时表示为bytea类型数据赋值,默认为on。 socketFactory:String类型。用于创建与服务器socket连接的类的名称。该类必须实现接口“javax.net.SocketFactory”,并定义无参或单String参数的构造函数。 socketFactoryArg:String类型。此值是上面提供的socketFactory类的构造函数的可选参数,不推荐使用。 receiveBufferSize:Integer类型。该值用于设置连接流上的SO_RCVBUF。 sendBufferSize:Integer类型。该值用于设置连接流上的SO_SNDBUF。 preferQueryMode:String类型。共有4种:"extended", "extendedForPrepared", "extendedCacheEverything", "simple"。用于指定执行查询的模式,simple模式会excute,不parse和bind;extended模式会bind和excute;extendedForPrepared模式为prepared statement扩展使用;extendedCacheEverything模式会缓存每个statement。 targetServerType: String类型。该参数识别主备数据节点是通过查询URL连接串中,数据节点是否允许写操作来实现的,默认为"any"。共有五种:"any"、"master"、"slave"、"preferSlave"、"clusterMainNode"。 master则尝试连接到URL连接串中的主节点,如果找不到将抛出异常。 slave则尝试连接到URL连接串中的备节点,如果找不到将抛出异常。 preferSlave则尝试连接到URL连接串中的备数据节点(如果有可用节点),否则连接到主数据节点。 any则尝试连接URL连接串中的任何一个数据节点。 clusterMainNode则尝试连接到URL串中的主节点或主备(容灾主节点),如果找不到将抛出异常。 priorityServers:Integer类型。此值用于指定url上配置的前n个节点作为主数据库实例被优先连接。默认值为NULL。该值为数字,大于0,且小于url上配置的DN数量。用于流式容灾场景。 例如:jdbc:postgresql://host1:port1,host2:port2,host3:port3,host4:port4,/database?priorityServers=2。即表示host1与host2为主数据库实例节点,host3与host4为容灾数据库实例节点。 forceTargetServerSlave:Boolean类型。此值用于控制是否开启强制连接备机功能,并在数据库实例发生主备切换时,禁止已存在的连接在升主备机上继续使用。默认值为false,表示不开启强制连接备机功能。true,表示开启强制连接备机功能。 traceInterfaceClass:String类型。默认值为NULL,用于获取traceId的实现类。值是实现获取traceId方法接口org.postgresql.log.Tracer的实现类的完整限定类名。 use_boolean:Boolean类型。用于设置extended模式下setBoolean方法绑定的oid类型,默认为false,绑定int2类型。设置为true则绑定Boolean类型。 allowReadOnly:Boolean类型。用于设置是否允许只读模式,默认为true,允许设置只读模式;设置为false则禁用只读模式。 TLSCiphersSupperted:String类型。用于设置支持的TLS加密套件,默认为TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384。 stripTrailingZeros:Boolean类型。默认值为false,设置为true则去除numeric类型后的0,仅对ResultSet.getObject(int columnIndex)生效。 enableTimeZone:Boolean类型。默认值为true,用于指定是否启用服务端时区设置,ture表示获取JVM时区指定数据库时区,false表示使用数据库时区。 loadBalanceHosts:Boolean类型。在默认模式下(禁用),默认顺序连接URL中指定的多个主机。如果启用,则使用洗牌算法从候选主机中随机选择一个主机建立连接。集中式环境下,如果使用此参数需要保证业务中没有写操作。 oracleCompatible:String类型。默认为false。用户控制驱动接口的A兼容特性。有以下几种取值: 设置为true或on,表示开启驱动侧所有的A兼容特性。 设置为false或off,表示关闭驱动侧所有的A兼容特性。 设置为“tag1,tag2,tag3”,配置一个或多个tag,tag之间用“,”隔开,表示开启驱动侧部分的A兼容特性,每个tag对应一个A兼容特性。 当前支持的tag有: getProcedureColumns:DatabaseMetaData#getProcedureColumns接口的行为兼容A行为。 batchInsertAffectedRows:reWriteBatchedInserts开启后,执行批量插入接口Statement#executeBatch的返回结果兼容A行为。 printSqlInLog:Boolean类型。默认值为true,用于指定异常信息中或日志中是否输出sql语句,true表示启用,false表示禁用。 user 数据库用户。 password 数据库用户的密码。 uppercaseAttributeName参数开启后,如果数据库中有小写、大写和大小写混合的元数据,只能查询出小写部分的元数据,并以大写的形式输出。使用前请务必确认元数据的存储是否全为小写以避免数据出错。
  • DBE_PLDEVELOPER.gs_source 用于记录PL/SQL对象(存储过程、函数、包、包体)编译相关信息,具体内容见下列字段描述。 打开plsql_show_all_error参数后,会把成功或失败的PL/SQL对象编译信息记录在此表中,如果关闭plsql_show_all_error参数则只会将正确的编译相关信息插入此表中。 gs_source表中只记录用户定义的原始对象语句,即使用户使用了ALTER改变了创建的SCHEMA或者名字,gs_source表中的信息也不会发生变化,如果用户更改了对象的SCHEMA或者名字,会导致用户在删除对象后,对象仍存在于gs_source表中。 gs_source表中的owner指创建的用户,不是用户创建存储过程或者package时指定的用户。 数据库默认情况下没有对gs_source表中设置行级访问控制,如果用户想使用数据库隔离性特性,请参考以下语句,自行添加行级访问控制。 ALTER TABLE dbe_pldeveloper.gs_source ENABLE ROW LEVEL SECURITY; CREATE ROW LEVEL SECURITY POLICY all_data_rls ON dbe_pldeveloper.gs_source USING(owner = (select oid from pg_roles where rolname=current_user)); 表1 DBE_PLDEVELOPER.gs_source字段 名称 类型 描述 id oid 对象的ID。 owner bigint 对象创建用户ID。 nspid oid 对象的模式ID。 name name 对象名。 type text 对象类型(procedure/function/package/package body)。 status boolean 是否创建成功。 src text 对象创建的原始语句。 父主题: DBE_PLDEVELOPER
  • 嵌套赋值 给变量嵌套赋值的语法请参见图2。 图2 nested_assignment_value::= 对以上语法格式的解释如下:图2 variable_name:变量名。 col_name:列名。 subscript:下标,针对数组变量使用,可以是值或表达式,类型必须为int。 value:可以是值或表达式。值value的类型需要和变量variable_name的类型兼容才能正确赋值。 示例: 1 2 3 4 5 6 7 8 9 10 11 gaussdb=# CREATE TYPE o1 as (a int, b int); CREATE TYPE gaussdb=# DECLARE TYPE r1 is VARRAY(10) of o1; emp_id r1; BEGIN emp_id(1).a := 5;--赋值 emp_id(1).b := 5*7784; END; / ANONYMOUS BLOCK EXECUTE
  • 变量语法 给变量赋值的语法请参见图1。 图1 assignment_value::= 对以上语法格式的解释如下: variable_name:变量名。 value:可以是值或表达式。值value的类型需要和变量variable_name的类型兼容才能正确赋值。 示例: 1 2 3 4 5 6 7 8 gaussdb=# DECLARE emp_id INTEGER := 7788;--赋值 BEGIN emp_id := 5;--赋值 emp_id := 5*7784; END; / ANONYMOUS BLOCK EXECUTE
  • 语法格式 SELECT select_expressions INTO [STRICT] target FROM ... SELECT INTO [STRICT] target expression [FROM ..] 通过基础 SQL 命令加INTO子句可以将单行或多列的结果赋值给一个变量(记录、行类型、标量变量列表)。 target参数可以是一个记录变量、一个行变量或一个有逗号分隔的简单变量和记录/行域列表。 STRICT选项 在开启参数set behavior_compat_options = 'select_into_return_null'的前提下(默认未开启),若指定该选项则该查询必须刚好返回一行不为空的结果集,否则会报错,报错信息可能是NO_DATA_FOUND(没有行)、TOO_MANY_ROWS(多于一行)或QUERY_RETURNED_NO_ROWS (没有数据返回)。若不指定该选项则没有该限定,且支持返回空结果集。
  • 故障注入系统函数 gs_fault_inject(int64, text, text, text, text, text) 描述:该函数不能调用,调用时会报WARNING信息:"unsupported fault injection",并不会对数据库产生任何影响和改变。 参数:int64注入故障类型(0:C LOG 扩展页面,1:读取CLOG页面,2:强制死锁)。 text第二个入参在第一入参为2的模式下若为“1”则死锁,其余不死锁;第二个入参在第一入参为0,1时,表示CLOG开始扩展或读取的起始页面号。 text第三个入参在第一入参为0,1时,表示扩展或读取的页面个数。 text第四到六入参为预留参数。 返回值类型:int64 父主题: 函数和操作符
  • 参数说明 WITH [ RECURSIVE ] with_query [, ...] 用于声明一个或多个可以在主查询中通过名称引用的子查询,相当于临时表。 如果声明了RECURSIVE,那么允许SELECT子查询通过名称引用它自己。 with_query_name指定子查询生成的结果集名称,在查询中可使用该名称访问 子查询的结果集。 column_name指定子查询结果集中显示的列名。 每个子查询可以是SELECT,VALUES,INSERT,UPDATE或DELETE语句。 用户可以使用MATERIALIZED / NOT MATERIALIZED对CTE进行修饰。 如果声明为MATERIALIZED,WITH查询将被物化,生成一个子查询结果集的拷贝,在引用处直接查询该拷贝,因此WITH子查询无法和主干SELECT语句进行联合优化(如谓词下推、等价类传递等),对于此类场景可以使用NOT MATERIALIZED进行修饰,如果WITH查询语义上可以作为子查询内联执行,则可以进行上述优化。 如果用户没有显示声明物化属性则遵守以下规则:如果CTE只在所属主干语句中被引用一次,且语义上支持内联执行,则会被改写为子查询内联执行,否则以CTE Scan的方式物化执行。 plan_hint子句 以/*+ */的形式在DELETE关键字后,用于对DELETE对应的语句块生成的计划进行hint调优,详细用法请参见章节使用Plan Hint进行调优。每条语句中只有第一个/*+ plan_hint */注释块会作为hint生效,里面可以写多条hint。 ONLY 如果指定ONLY则只有该表被删除;如果没有声明,则该表和它的所有子表将都被删除。 table_name 目标表的名称(可以有模式修饰)。 取值范围:已存在的表名。 支持使用DATABASE LINK方式对远端表进行操作,使用方式详情请见DATABASE LINK。 partition_clause 指定分区删除操作。 PARTITION { ( partition_name ) | FOR ( partition_value [, ...] ) } | SUBPARTITION { ( subpartition_name ) | FOR ( subpartition_value [, ...] ) } 关键字详见SELECT章节介绍。 示例详见CREATE TABLE SUBPARTITION。 partitions_clause 指定多个分区删除操作。 PARTITION { ( { partition_name | subpartition_name } [, ...] ) } 此语法仅在参数sql_compatibility='B'时生效。 关键字详见SELECT章节介绍。 示例详见CREATE TABLE SUBPARTITION。 alias 目标表的别名。 取值范围:字符串,符合标识符命名规范。 using_list using子句。 当参数sql_compatibility='B'或删除多张目标表时,using_list指定关联表的集合时可以同时出现目标表,并且可以定义表的别名并在目标表中使用。其他情况下则目标表不可重复出现在using_list中。 condition 一个返回Boolean值的表达式,用于判断哪些行需要被删除。不建议使用int等数值类型作为condition,因为int等数值类型可以隐式转换为bool值(非0值隐式转换为true,0转换为false),可能导致非预期的结果。 WHERE CURRENT OF cursor_name 当cursor指向表的某一行时,可以使用此语法删除cursor当前指向的行。使用限制及约束请参考UPDATE章节对此语法介绍。 ORDER BY子句 关键字详见SELECT章节介绍。 LIMIT子句 关键字详见SELECT章节介绍。 output_expr DELETE命令删除行之后计算输出结果的表达式。该表达式可以使用表的任意字段。可以使用*返回被删除行的所有字段。 output_name 一个字段的输出名称。 取值范围:字符串,符合标识符命名规范。
  • 注意事项 表的所有者、被授予表DELETE权限的用户或被授予DELETE ANY TABLE权限的用户有权删除表中数据,当三权分立开关关闭时,系统管理员默认拥有此权限。同时也必须有USING子句引用的表以及condition上读取表的SELECT权限。 对于行存复制表,仅支持两种场景下的DELETE操作: 有主键约束的场景。 执行计划能下推的场景。 对于多表删除语法,暂时不支持对视图和含有RULE的表进行多表删除。 对于子查询是STREAM计划的DELETE语句,不支持删除的行数据同时进行UPDATE更新操作。
  • 语法格式 单表删除: [ WITH [ RECURSIVE ] with_query [, ...] ] DELETE [/*+ plan_hint */] [FROM] [ ONLY ] table_name [ * ] [ [ [partition_clause] [ [ AS ] alias ] ] | [ [ [ AS ] alias ] [partitions_clause] ] ] [ USING using_list ] [ WHERE condition | WHERE CURRENT OF cursor_name ] [ ORDER BY {expression [ [ ASC | DESC | USING operator ] [ LIMIT { count } ] [ RETURNING { * | { output_expr [ [ AS ] output_name ] } [, ...] } ];
  • 接口介绍 高级功能包DBE_OUTPUT支持的所有接口请参见表 DBE_OUTPUT。 表1 DBE_OUTPUT 接口名称 描述 DBE_OUTPUT.PRINT_LINE 输出指定的文本,并添加换行符。 DBE_OUTPUT.PRINT 输出指定的文本,不添加换行符。 DBE_OUTPUT.SET_BUFFER_SIZE 设置输出缓冲区的大小,如果不指定则缓冲区最大能容忍20000字节,如果指定小于等于2000字节,则缓冲区允许容纳2000字节。 DBE_OUTPUT.DISABLE 禁用put、put_line、new_line、get_line、get_lines调用,并清空输出缓冲区。 DBE_OUTPUT.ENABLE 开启缓冲区,允许对PUT、PUT_LINE、NEW_LINE、GET_LINE和GET_LINES的调用,设置缓冲区大小。 DBE_OUTPUT.GET_LINE 从缓冲区中以换行符作为分界获取一行数据,获取的数据将不会输出到客户端。 DBE_OUTPUT.GET_LINES 以VARCHAR数组的形式获取缓冲区的指定行数的字符串,被取出的内容将会在缓冲区中清除,不会输出到客户端。 DBE_OUTPUT.NEW_LINE 放置一行在缓冲区末尾,放置行尾标记,空出新的一行。 DBE_OUTPUT.PUT 将输入字符串放入到缓冲区,末尾不加换行符,在存储过程结束时会将以换行符结尾的行输出显示。 DBE_OUTPUT.PUT_LINE 将输入字符串放入到缓冲区,并末尾添加换行符,在存储过程结束时会将以换行符结尾的行输出显示。 DBE_OUTPUT.PRINT_LINE 存储过程PRINT_LINE向消息缓冲区写入一行带有行结束符的文本。DBE_OUTPUT.PRINT_LINE函数原型为: 1 2 DBE_OUTPUT.PRINT_LINE ( format IN VARCHAR2); 表2 DBE_OUTPUT.PRINT_LINE接口参数说明 参数 描述 format 写入消息缓冲区的文本。 DBE_OUTPUT.PRINT 存储过程PRINT将指定的文本输出到指定文本的前面,不添加换行符。DBE_OUTPUT.PRINT函数原型为: 1 2 DBE_OUTPUT.PRINT ( format IN VARCHAR2); 表3 DBE_OUTPUT.PRINT接口参数说明 参数 描述 format 写入指定文本前的文本。 DBE_OUTPUT.SET_BUFFER_SIZE 存储过程SET_BUFFER_SIZE设置输出缓冲区的大小,如果不指定的话缓冲区最大只能容纳20000字节。DBE_OUTPUT.SET_BUFFER_SIZE函数原型为: 1 2 DBE_OUTPUT.SET_BUFFER_SIZE ( size IN INTEGER default 20000); 表4 DBE_OUTPUT.SET_BUFFER_SIZE接口参数说明 参数 描述 size 设置输出缓冲区的大小。
  • 示例 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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 BEGIN DBE_OUTPUT.SET_BUFFER_SIZE(50); DBE_OUTPUT.PRINT('hello, '); DBE_OUTPUT.PRINT_LINE('database!');--输出hello, database! END; / -- 测试disable禁用put、put_line、new_line、get_line、get_lines调用,测试put_line不输出 BEGIN dbe_output.disable(); dbe_output.put_line('1'); END; / -- 测试enable启用put、put_line、new_line、get_line、get_lines调用,测试put_line输出1 BEGIN dbe_output.enable(); dbe_output.put_line('1'); END; / -- 测试put,输入字符串a放入到缓冲区,末尾不加换行符,a不输出 BEGIN dbe_output.enable(); dbe_output.put('a'); END; / -- 测试new_line,添加换行,输出a BEGIN dbe_output.enable(); dbe_output.put('a'); dbe_output.new_line; END; / -- 测试get_line获取缓冲区数据保存到变量,使用put_line输出 DECLARE line VARCHAR(32672); status INTEGER := 0; BEGIN dbe_output.put_line('hello'); dbe_output.get_line(line, status); dbe_output.put_line('-----------'); dbe_output.put_line(line); dbe_output.put_line(status); END; / -- 预期结果为: ----------- hello 0 -- 测试get_line获取缓冲区多行内容,使用put_line输出 DECLARE lines dbms_output.chararr; numlines integer; BEGIN dbe_output.put_line('output line 1'); dbe_output.put_line('output line 2'); dbe_output.put_line('output line 3'); numlines := 100; dbe_output.get_lines(lines, numlines); dbe_output.put_line('num: ' || numlines); dbe_output.put_line('get line 1: ' || lines(1)); dbe_output.put_line('get line 2: ' || lines(2)); dbe_output.put_line('get line 3: ' || lines(3)); END; / -- 预期结果为: num: 3 get line 1: output line 1 get line 2: output line 2 get line 3: output line 3
  • FILE_IOSTAT 通过对数据文件I/O的统计,反映数据的I/O性能,用以发现I/O操作异常等性能问题。 表1 FILE_IOSTAT字段 名称 类型 描述 filenum oid 文件标识。 dbid oid 数据库标识。 spcid oid 表空间标识。 phyrds bigint 读物理文件的数目。 phywrts bigint 写物理文件的数目。 phyblkrd bigint 读物理文件块的数目。 phyblkwrt bigint 写物理文件块的数目。 readtim bigint 读文件的总时长(单位:微秒)。 writetim bigint 写文件的总时长(单位:微秒)。 avgiotim bigint 读写文件的平均时长(单位:微秒)。 lstiotim bigint 最后一次读文件时长(单位:微秒)。 miniotim bigint 读写文件的最小时长(单位:微秒)。 maxiowtm bigint 读写文件的最大时长(单位:微秒)。 父主题: File
  • 注释信息函数 col_description(table_oid, column_number) 描述:获取一个表字段的注释。 返回类型:text 备注:col_description返回一个表中字段的注释,通过表OID和字段号来声明。 obj_description(object_oid, catalog_name) 描述:获取一个数据库对象的注释。 返回类型:text 备注:带有两个参数的obj_description返回一个数据库对象的注释,该对象是通过其OID和其所属的系统表名称声明。比如,obj_description(123456,'pg_class')将返回OID为123456的表的注释。只带一个参数的obj_description只要求对象OID。 obj_description不能用于表字段,因为字段没有自己的OID。 obj_description(object_oid) 描述:获取一个数据库对象的注释。 返回类型:text shobj_description(object_oid, catalog_name) 描述:获取一个共享数据库对象的注释。 返回类型:text 备注:shobj_description和obj_description差不多,不同之处仅在于前者用于共享对象。一些系统表是通用于 GaussDB 中所有数据库的全局表,因此这些表的注释也是全局存储的。
  • 事务ID和快照 内部事务ID类型(xid)是64位。这些函数使用的数据类型txid_snapshot,存储在特定时刻事务ID可见性的信息。其组件描述在表12。 表12 快照组件 名称 描述 xmin 最早的事务ID(txid)仍然活动。所有较早事务将是已经提交可见的,或者是直接回滚。 xmax 作为尚未分配的txid。所有大于或等于此txids的都是尚未开始的快照时间,因此不可见。 xip_list 当前快照中活动的txids。这个列表只包含在xmin和xmax之间活动的txids;有可能活动的txids高于xmax。介于大于等于xmin、小于xmax,并且不在这个列表中的txid,在这个时间快照已经完成的,因此按照提交状态查看他是可见还是回滚。这个列表不包含子事务的txids。 txid_snapshot的文本表示为:xmin:xmax:xip_list。 示例:10:20:10,14,15意思为:xmin=10, xmax=20, xip_list=10, 14, 15。 以下的函数在一个输出形式中提供服务器事务信息。这些函数的主要用途是为了确定在两个快照之间有哪个事务提交。 txid_current() 描述:获取当前事务ID。 返回类型:bigint gs_txid_oldestxmin() 描述:获取当前最小事务id的值oldesxmin。 返回类型:bigint txid_current_snapshot() 描述:获取当前快照。 返回类型:txid_snapshot txid_snapshot_xip(txid_snapshot) 描述:在快照中获取正在进行的事务ID。 返回类型:setof bigint txid_snapshot_xmax(txid_snapshot) 描述:获取快照的xmax。 返回类型:bigint txid_snapshot_xmin(txid_snapshot) 描述:获取快照的xmin。 返回类型:bigint txid_visible_in_snapshot(bigint, txid_snapshot) 描述:在快照中事务ID是否可见(不使用子事务ID)。 返回类型:Boolean get_local_prepared_xact() 描述:获取当前节点两阶段残留事务信息,包括事务id,两阶段gid名称,prepared的时间,owner的oid,database的oid及当前节点的node_name。 返回类型:xid, text, timestamptz, oid, oid,text get_remote_prepared_xacts() 描述:获取所有远程节点两阶段残留事务信息,包括事务id,两阶段gid名称,prepared的时间,owner的名称,database的名称及node_name。 返回类型:xid, text, timestamptz, name, name,text global_clean_prepared_xacts(text, text) 描述:并发清理两阶段残留事务,仅GaussDB分布式场景下gs_clean工具可以调用清理,其他用户调用均返回false。 返回类型:Boolean gs_get_next_xid_csn() 描述:返回全局所有节点上的next_xid和next_csn值。 返回值如下: 表13 gs_get_next_xid_csn返回参数说明 字段名 描述 nodename 节点名称。 next_xid 当前节点下一个事务id号。 next_csn 当前节点下一个csn号。
  • 系统表信息函数 format_type(type_oid, typemod) 描述:获取数据类型的SQL名称 返回类型:text 备注:format_type通过某个数据类型的OID以及可能的修饰词,返回其SQL名称。如果不知道具体的修饰词,则在修饰词的位置传入NULL。修饰词一般只对有长度限制的数据类型有意义。format_type所返回的SQL名称中包含数据类型的长度值,其大小是:实际存储长度len - sizeof(int32),单位字节。原因是数据存储时需要32位的空间来存储用户对数据类型的自定义长度信息,即实际存储长度要比用户定义长度多4个字节。在下例中,format_type返回的SQL名称为“character varying(6)”,6表示varchar类型的长度值是6字节,因此该类型的实际存储长度为10字节。 1 2 3 4 5 gaussdb=# SELECT format_type((SELECT oid FROM pg_type WHERE typname='varchar'), 10); format_type ---------------------- character varying(6) (1 row) getdistributekey(table_name) 描述:获取一个hash表的分布列。单机环境下不支持分布,该函数返回为空。 pg_check_authid(role_oid) 描述:检查是否存在给定oid的角色名。 返回类型:Boolean 示例: gaussdb=# select pg_check_authid(1); pg_check_authid ----------------- f (1 row) pg_describe_object(catalog_id, object_id, object_sub_id) 描述:获取数据库对象的描述。 返回类型:text 备注:pg_describe_object返回由目录OID,对象OID和一个(或许0个)子对象ID指定的数据库对象的描述。这有助于确认存储在pg_depend系统表中对象的身份。 pg_get_constraintdef(constraint_oid) 描述:获取约束的定义。 返回类型:text pg_get_constraintdef(constraint_oid, pretty_bool) 描述:获取约束的定义。 返回类型:text 备注:pg_get_constraintdef和pg_get_indexdef分别从约束或索引上使用创建命令进行重构。 pg_get_expr(pg_node_tree, relation_oid) 描述:反编译表达式的内部形式,假设其中的任何Vars都引用第二个参数指定的关系。 返回类型:text pg_get_expr(pg_node_tree, relation_oid, pretty_bool) 描述:反编译表达式的内部形式,假设其中的任何Vars都引用第二个参数指定的关系。 返回类型:text 备注:pg_get_expr反编译一个独立表达式的内部形式,比如一个字段的缺省值。便于检查系统表的内容。如果表达式可能包含关键字,则指定他们引用相关的OID作为第二个参数;如果没有关键字,为零即可。 pg_get_functiondef(func_oid) 描述:获取函数的定义。 返回类型:text 示例: gaussdb=# SELECT * FROM pg_get_functiondef(598); headerlines | definition -------------+---------------------------------------------------- 4 | CREATE OR REPLACE FUNCTION pg_catalog.abbrev(inet)+ | RETURNS text + | LANGUAGE internal + | IMMUTABLE STRICT NOT FENCED NOT SHIPPABLE + | AS $function$inet_abbrev$function$ + | (1 row) pg_get_function_arguments(func_oid) 描述:获取函数定义的参数列表(带默认值) 返回类型:text 备注:pg_get_function_arguments返回一个函数的参数列表,需要在CREATE FUNCTION中使用这种格式。 pg_get_function_identity_arguments(func_oid) 描述:获取参数列表来确定一个函数 (不带默认值) 返回类型:text 备注:pg_get_function_identity_arguments返回需要的参数列表用来标识函数,这种形式需要在ALTER FUNCTION中使用,并且这种形式省略了默认值。 pg_get_function_result(func_oid) 描述:获取函数的RETURNS子句 返回类型:text 备注:pg_get_function_result为函数返回适当的RETURNS子句。 pg_get_indexdef(index_oid) 描述:获取索引的CREATE INDEX命令 返回类型:text 示例: gaussdb=# SELECT * FROM pg_get_indexdef(16416); pg_get_indexdef ------------------------------------------------------------------------- CREATE INDEX test3_b_idx ON test3 USING btree (b) TABLESPACE pg_default (1 row) pg_get_indexdef(index_oid, dump_schema_only) 描述:获取索引的CREATE INDEX命令,仅用于dump场景。对于包含local索引的间隔分区表,当dump_schema_only为true时,返回的创建索引语句中不包含自动创建的分区的local索引信息;当dump_schema_only为false时,返回的创建索引语句中包含自动创建的分区的local索引信息。对于非间隔分区表或者不包含local索引的间隔分区分区表,dump_schema_only参数取值不影响函数返回结果。 返回类型:text 示例: gaussdb=# CREATE TABLE sales gaussdb-# (prod_id NUMBER(6), gaussdb(# cust_id NUMBER, gaussdb(# time_id DATE, gaussdb(# channel_id CHAR(1), gaussdb(# promo_id NUMBER(6), gaussdb(# quantity_sold NUMBER(3), gaussdb(# amount_sold NUMBER(10,2) gaussdb(# ) PARTITION BY RANGE( time_id) INTERVAL('1 day') gaussdb-# ( gaussdb(# partition p1 VALUES LESS THAN ('2019-02-01 00:00:00'), gaussdb(# partition p2 VALUES LESS THAN ('2019-02-02 00:00:00') gaussdb(# ); CREATE TABLE gaussdb=# create index index_sales on sales(prod_id) local (PARTITION idx_p1 ,PARTITION idx_p2); CREATE INDEX gaussdb=# -- 插入数据没有匹配的分区,新创建一个分区,并将数据插入该分区 gaussdb=# INSERT INTO sales VALUES(1, 12, '2019-02-05 00:00:00', 'a', 1, 1, 1); INSERT 0 1 gaussdb=# SELECT oid FROM pg_class WHERE relname = 'index_sales'; oid ------- 24632 (1 row) gaussdb=# SELECT * FROM pg_get_indexdef(24632, true); pg_get_indexdef -------------------------------------------------------------------------------------------------------------------------- CREATE INDEX index_sales ON sales USING btree (prod_id) LOCAL(PARTITION idx_p1, PARTITION idx_p2) TABLESPACE pg_default (1 row) gaussdb=# SELECT * FROM pg_get_indexdef(24632, false); pg_get_indexdef ------------------------------------------------------------------------------------------------------------------------------------ -------------------- CREATE INDEX index_sales ON sales USING btree (prod_id) LOCAL(PARTITION idx_p1, PARTITION idx_p2, PARTITION sys_p1_prod_id_idx) TA BLESPACE pg_default (1 row pg_get_indexdef(index_oid, column_no, pretty_bool) 描述:获取索引的CREATE INDEX命令,或者如果column_no不为零,则只获取一个索引字段的定义。 示例: gaussdb=# SELECT * FROM pg_get_indexdef(16416, 0, false); pg_get_indexdef ------------------------------------------------------------------------- CREATE INDEX test3_b_idx ON test3 USING btree (b) TABLESPACE pg_default (1 row) gaussdb=# SELECT * FROM pg_get_indexdef(16416, 1, false); pg_get_indexdef ----------------- b (1 row) 返回类型:text 备注:pg_get_functiondef为函数返回一个完整的CREATE OR REPLACE FUNCTION语句。 pg_get_keywords() 描述:获取SQL关键字和类别列表。 返回类型:setof record 备注:pg_get_keywords返回一组关于描述服务器识别SQL关键字的记录。word列包含关键字。catcode列包含一个分类代码:U表示通用的,C表示列名,T表示类型或函数名,或R表示保留。catdesc列包含了一个可能本地化描述分类的字符串。 pg_get_userbyid(role_oid) 描述:获取给定OID的角色名。 返回类型:name 备注:pg_get_userbyid通过角色的OID抽取对应的用户名。 pg_check_authid(role_id) 描述:通过role_id检查用户是否存在。 返回类型:text 示例: gaussdb=# SELECT pg_check_authid(20); pg_check_authid ----------------- f (1 row) pg_get_viewdef(view_name) 描述:为视图获取底层的SELECT命令。 返回类型:text pg_get_viewdef(view_name, pretty_bool) 描述:为视图获取底层的SELECT命令,如果pretty_bool为true,行字段可以包含80列。 返回类型:text 备注:pg_get_viewdef重构出定义视图的SELECT查询。这些函数大多数都有两种形式,其中带有pretty_bool参数,且参数为true时,是"适合打印"的结果,这种格式更容易读。另一种是缺省的格式,更有可能被将来的不同版本用同样的方法解释。如果是用于转储,那么尽可能避免使用适合打印的格式。给pretty-print参数传递false生成的结果和没有这个参数的变种生成的结果完全一样。 pg_get_viewdef(view_oid) 描述:为视图获取底层的SELECT命令。 返回类型:text pg_get_viewdef(view_oid, pretty_bool) 描述:为视图获取底层的SELECT命令,如果pretty_bool为true,行字段可以包含80列。 返回类型:text pg_get_viewdef(view_oid, wrap_column_int) 描述:为视图获取底层的SELECT命令;行字段被换到指定的列数,打印是隐含的。 返回类型:text pg_get_tabledef(table_oid) 描述:根据table_oid获取表定义。 示例: gaussdb=# SELECT * FROM pg_get_tabledef(16384); pg_get_tabledef ------------------------------------------------------- SET search_path = public; + CREATE TABLE t1 ( + c1 bigint DEFAULT nextval('serial'::regclass)+ ) + WITH (orientation=row, compression=no) + TO GROUP group1; (1 row) 返回类型:text pg_get_tabledef(table_name) 描述:根据table_name获取表定义。 示例: gaussdb=# SELECT * FROM pg_get_tabledef('t1'); pg_get_tabledef ------------------------------------------------------- SET search_path = public; + CREATE TABLE t1 ( + c1 bigint DEFAULT nextval('serial'::regclass)+ ) + WITH (orientation=row, compression=no) + TO GROUP group1; (1 row) 返回类型:text 备注:pg_get_tabledef重构出表定义的CREATE语句,包含了表定义本身、索引信息、comments信息。对于表对象依赖的group、schema、tablespace、server等信息,需要用户自己去创建,表定义里不会有这些对象的创建语句。 pg_options_to_table(reloptions) 描述:获取存储选项名称/值对的集合。 返回类型:setof record 备注:pg_options_to_table当通过pg_class.reloptions或pg_attribute.attoptions时返回存储选项名称/值对(option_name/option_value)的集合。 pg_tablespace_databases(tablespace_oid) 描述:获取在指定的表空间中有对象的数据库OID集合。 返回类型:setof oid 备注:pg_tablespace_databases允许检查表空间的状况,返回在该表空间中保存了对象的数据库OID集合。如果这个函数返回数据行,则该表空间就是非空的,因此不能删除。要显示该表空间中的特定对象,用户需要连接pg_tablespace_databases标识的数据库与查询pg_class系统表。 pg_tablespace_location(tablespace_oid) 描述:获取表空间所在的文件系统的路径。 返回类型:text pg_typeof(any) 描述:获取任何值的数据类型。 返回类型:regtype 备注:pg_typeof返回传递给他的值的数据类型OID。这可能有助于故障排除或动态构造SQL查询。声明此函数返回regtype,这是一个OID别名类型(请参考对象标识符类型);这意味着它是一个为了比较而显示类型名称的OID。 示例: 1 2 3 4 5 6 7 8 9 10 11 gaussdb=# SELECT pg_typeof(33); pg_typeof ----------- integer (1 row) gaussdb=# SELECT typlen FROM pg_type WHERE oid = pg_typeof(33); typlen -------- 4 (1 row) collation for (any) 描述:获取参数的排序。 返回类型:text 备注:表达式collation for返回传递给他的值的排序。 示例: 1 2 3 4 5 gaussdb=# SELECT collation for (description) FROM pg_description LIMIT 1; pg_collation_for ------------------ "default" (1 row) 值可能是引号括起来的并且模式限制的。如果没有为参数表达式排序,则返回一个null值。如果参数不是排序的类型,则抛出一个错误。 pg_extension_update_paths(name) 描述:返回指定扩展的版本更新路径。 返回类型:text(source text), text(path text), text(target text) pg_get_serial_sequence(tablename, colname) 描述:获取对应表名和列名上的序列。 返回类型:text 示例: gaussdb=# SELECT * FROM pg_get_serial_sequence('t1', 'c1'); pg_get_serial_sequence ------------------------ public.serial (1 row) pg_sequence_parameters(sequence_oid) 描述:获取指定sequence的参数,包含起始值,最小值和最大值,递增值等。 返回类型:int16, int16, int16, int16, Boolean 示例: gaussdb=# SELECT * FROM pg_sequence_parameters(16420); start_value | minimum_value | maximum_value | increment | cycle_option -------------+---------------+---------------------+-----------+-------------- 101 | 1 | 9223372036854775807 | 1 | f (1 row)
  • 模式可见性查询函数 每个函数执行检查数据库对象类型的可见性。对于函数和操作符,如果在前面的搜索路径中没有相同的对象名称和参数的数据类型,则此对象是可见的。对于操作符类,则要同时考虑名称和相关索引的访问方法。 所有这些函数都需要使用OID来标识需要检查的对象。如果用户想通过名称测试对象,则使用OID别名类型(regclass、regtype、regprocedure、regoperator、regconfig或regdictionary)将会很方便。 比如,如果一个表所在的模式在搜索路径中,并且在前面的搜索路径中没有同名的表,则这个表是可见的。它等效于表可以不带明确模式修饰进行引用。比如,要列出所有可见表的名称: 1 gaussdb=# SELECT relname FROM pg_class WHERE pg_table_is_visible(oid); pg_collation_is_visible(collation_oid) 描述:该排序是否在搜索路径中可见。 返回类型:Boolean pg_conversion_is_visible(conversion_oid) 描述:该转换是否在搜索路径中可见。 返回类型:Boolean pg_function_is_visible(function_oid) 描述:该函数是否在搜索路径中可见。 返回类型:Boolean pg_opclass_is_visible(opclass_oid) 描述:该操作符类是否在搜索路径中可见。 返回类型:Boolean pg_operator_is_visible(operator_oid) 描述:该操作符是否在搜索路径中可见。 返回类型:Boolean pg_opfamily_is_visible(opclass_oid) 描述:该操作符族是否在搜索路径中可见。 返回类型:Boolean pg_table_is_visible(table_oid) 描述:该表是否在搜索路径中可见。 返回类型:Boolean pg_ts_config_is_visible(config_oid) 描述:该文本检索配置是否在搜索路径中可见。 返回类型:Boolean pg_ts_dict_is_visible(dict_oid) 描述:该文本检索词典是否在搜索路径中可见。 返回类型:Boolean pg_ts_parser_is_visible(parser_oid) 描述:该文本搜索解析是否在搜索路径中可见。 返回类型:Boolean pg_ts_template_is_visible(template_oid) 描述:该文本检索模板是否在搜索路径中可见。 返回类型:Boolean pg_type_is_visible(type_oid) 描述:该类型(或域)是否在搜索路径中可见。 返回类型:Boolean
  • 访问权限查询函数 DDL类权限ALTER、DROP、COMMENT、INDEX、VACUUM属于所有者固有的权限,隐式拥有。 以下访问权限查询函数仅表示用户是否具有某对象上的某种对象权限,即返回记录在系统表acl字段中的对象权限拥有情况。 has_any_column_privilege(user, table, privilege) 描述:指定用户是否有访问表任何列的权限。 表1 参数类型说明 参数名 合法入参类型 user name, oid table text, oid privilege text 返回类型:Boolean has_any_column_privilege(table, privilege) 描述:当前用户是否有访问表任何列的权限,合法参数类型见表1。 返回类型:Boolean 备注:has_any_column_privilege检查用户是否以特定方式访问表的任何列。其参数可能与has_table_privilege类似,除了访问权限类型必须是SELECT、INSERT、UPDATE、COMMENT或REFEREN CES 的一些组合。 拥有表的表级别权限则隐含的拥有该表每列的列级权限,因此如果与has_table_privilege参数相同,has_any_column_privilege总是返回true。但是如果授予至少一列的列级权限也返回成功。 has_column_privilege(user, table, column, privilege) 描述:指定用户是否有访问列的权限。 表2 参数类型说明 参数名 合法入参类型 user name, oid table text, oid column text, smallint privilege text 返回类型:Boolean has_column_privilege(table, column, privilege) 描述:当前用户是否有访问列的权限,合法参数类型见表2。 返回类型:Boolean 备注:has_column_privilege检查用户是否以特定方式访问一列。其参数类似于has_table_privilege,可以通过列名或属性号添加列。想要的访问权限类型必须是SELECT、INSERT、UPDATE、COMMENT或REFERENCES的一些组合。 拥有表的表级别权限则隐含的拥有该表每列的列级权限。 has_cek_privilege(user, cek, privilege) 描述:指定用户是否有访问列加密密钥CEK的权限。参数说明如下。 表3 参数类型说明 参数名 合法入参类型 描述 取值范围 user name,oid 用户 用户名字或id。 cek text,oid 列加密密钥 列加密密钥名称或id。 privilege text 权限 USAGE:允许使用指定列加密密钥。 DROP:允许删除指定列加密密钥。 返回类型:Boolean has_cmk_privilege(user, cmk, privilege) 描述:指定用户是否有访问客户端加密主密钥CMK的权限。参数说明如下。 表4 参数类型说明 参数名 合法入参类型 描述 取值范围 user name,oid 用户 用户名字或id。 cmk text,oid 客户端加密主密钥 客户端加密主密钥名称或id。 privilege text 权限 USAGE:允许使用指定客户端加密主密钥。 DROP:允许删除指定客户端加密主密钥。 返回类型:Boolean has_database_privilege(user, database, privilege) 描述:指定用户是否有访问数据库的权限。参数说明如下。 表5 参数类型说明 参数名 合法入参类型 user name, oid database text, oid privilege text 返回类型:Boolean has_database_privilege(database, privilege) 描述:当前用户是否有访问数据库的权限,合法参数类型请参见表5。 返回类型:Boolean 备注:has_database_privilege检查用户是否能以在特定方式访问数据库。其参数类似has_table_privilege。访问权限类型必须是CREATE、CONNECT、TEMPORARY、ALTER、DROP、COMMENT或TEMP(等价于TEMPORARY)的一些组合。 has_directory_privilege(user, directory, privilege) 描述:指定用户是否有访问directory的权限。 表6 参数类型说明 参数名 合法入参类型 user name, oid directory text, oid privilege text 返回类型:Boolean has_directory_privilege(directory, privilege) 描述:当前用户是否有访问directory的权限,合法参数类型请参见表6。 返回类型:Boolean has_foreign_data_wrapper_privilege(user, fdw, privilege) 描述:指定用户是否有访问外部数据封装器的权限。 表7 参数类型说明 参数名 合法入参类型 user name, oid fdw text, oid privilege text 返回类型:Boolean has_foreign_data_wrapper_privilege(fdw, privilege) 描述:当前用户是否有访问外部数据封装器的权限。合法参数类型请参见表7。 返回类型:Boolean 备注:has_foreign_data_wrapper_privilege检查用户是否能以特定方式访问外部数据封装器。其参数类似has_table_privilege。访问权限类型必须是USAGE。 has_function_privilege(user, function, privilege) 描述:指定用户是否有访问函数的权限。 表8 参数类型说明 参数名 合法入参类型 user name, oid function text, oid privilege text 返回类型:Boolean has_function_privilege(function, privilege) 描述:当前用户是否有访问函数的权限。合法参数类型请参见表8。 返回类型:Boolean 备注:has_function_privilege检查一个用户是否能以指定方式访问一个函数。其参数类似has_table_privilege。使用文本字符而不是OID声明一个函数时,允许输入的类型和regprocedure数据类型一样(请参考对象标识符类型)。访问权限类型必须是EXECUTE、ALTER、DROP或COMMENT。 has_language_privilege(user, language, privilege) 描述:指定用户是否有访问语言的权限。 表9 参数类型说明 参数名 合法入参类型 user name, oid language text, oid privilege text 返回类型:Boolean has_language_privilege(language, privilege) 描述:当前用户是否有访问语言的权限。合法参数类型请参见表9。 返回类型:Boolean 备注:has_language_privilege检查用户是否能以特定方式访问一个过程语言。其参数类似has_table_privilege。访问权限类型必须是USAGE。 has_nodegroup_privilege(user, nodegroup, privilege) 描述:检查用户是否有数据库节点访问权限。 返回类型:Boolean 表10 参数类型说明 参数名 合法入参类型 user name, oid nodegroup text, oid privilege text has_nodegroup_privilege(nodegroup, privilege) 描述:检查用户是否有数据库节点访问权限。参数与has_table_privilege类似。访问权限类型必须是USAGE、CREATE、COMPUTE、ALTER或DROP。 返回类型:Boolean has_schema_privilege(user, schema, privilege) 描述:指定用户是否有访问模式的权限。 返回类型:Boolean has_schema_privilege(schema, privilege) 描述:当前用户是否有访问模式的权限。 返回类型:Boolean 备注:has_schema_privilege检查用户是否能以特定方式访问一个模式。其参数类似has_table_privilege。访问权限类型必须是CREATE、USAGE、ALTER、DROP或COMMENT的一些组合。 has_server_privilege(user, server, privilege) 描述:指定用户是否有访问外部服务的权限。 返回类型:Boolean has_server_privilege(server, privilege) 描述:当前用户是否有访问外部服务的权限。 返回类型:Boolean 备注:has_server_privilege检查用户是否能以指定方式访问一个外部服务器。其参数类似has_table_privilege。访问权限类型必须是USAGE、ALTER、DROP或COMMENT之一的值。 has_table_privilege(user, table, privilege) 描述:指定用户是否有访问表的权限。 返回类型:Boolean has_table_privilege(table, privilege) 描述:当前用户是否有访问表的权限。 返回类型:Boolean 备注:has_table_privilege检查用户是否以特定方式访问表。用户可以通过名称或OID(pg_authid.oid)来指定,public表明PUBLIC伪角色,或如果缺省该参数,则使用current_user。该表可以通过名称或者OID声明。如果用名称声明,则在必要时可以用模式进行修饰。如果使用文本字符串来声明所希望的权限类型,这个文本字符串必须是SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES、TRIGGER、ALTER、DROP、COMMENT、INDEX或VACUUM之一的值。可以给权限类型添加WITH GRANT OPTION,用来测试权限是否拥有授权选项。也可以用逗号分隔列出的多个权限类型,如果拥有任何所列出的权限,则结果便为true。 示例: 1 2 3 4 5 6 7 8 9 10 11 gaussdb=# SELECT has_table_privilege('tpcds.web_site', 'select'); has_table_privilege --------------------- t (1 row) gaussdb=# SELECT has_table_privilege('omm', 'tpcds.web_site', 'select,INSERT WITH GRANT OPTION '); has_table_privilege --------------------- t (1 row) has_tablespace_privilege(user, tablespace, privilege) 描述:指定用户是否有访问表空间的权限。 返回类型:Boolean has_tablespace_privilege(tablespace, privilege) 描述:当前用户是否有访问表空间的权限。 返回类型:Boolean 备注:has_tablespace_privilege检查用户是否能以特定方式访问一个表空间。其参数类似has_table_privilege。访问权限类型必须是CREATE、ALTER、DROP或COMMENT之一的值。 pg_has_role(user, role, privilege) 描述:指定用户是否有角色的权限。 返回类型:Boolean pg_has_role(role, privilege) 描述:当前用户是否有角色的权限。 返回类型:Boolean 备注:pg_has_role检查用户是否能以特定方式访问一个角色。其参数类似has_table_privilege,除了public不能用做用户名。访问权限类型必须是MEMBER或USAGE的一些组合。 MEMBER表示的是角色中的直接或间接成员关系(也就是SET ROLE的权限),而USAGE表示无需通过SET ROLE也直接拥有角色的使用权限。
  • 会话信息函数 SYS_CONTEXT() 描述:返回当前时刻与上下文命名空间'namespace'关联的参数'parameter'的值。 返回值类型:text 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 select SYS_CONTEXT('userenv','NLS_CURRENCY'); sys_context ------------- $ (1 row) select SYS_CONTEXT('userenv','NLS_DATE_FORMAT'); sys_context --------------- ISO, MDY (1 row) select SYS_CONTEXT('userenv','NLS_DATE_LANGUAGE'); sys_context ------------- en_US.UTF-8 (1 row) current_catalog 描述:当前数据库的名称(在标准SQL中称"catalog")。 返回值类型:name 示例: 1 2 3 4 5 testdb=# SELECT current_catalog; current_database ------------------ testdb (1 row) current_database() 描述:当前数据库的名称。 返回值类型:name 示例: 1 2 3 4 5 testdb=# SELECT current_database(); current_database ------------------ testdb (1 row) current_query() 描述:由客户端提交的当前执行语句(可能包含多个声明)。 返回值类型:text 示例: 1 2 3 4 5 gaussdb=# SELECT current_query(); current_query ------------------------- SELECT current_query(); (1 row) current_schema[()] 描述:当前模式的名称。 返回值类型:name 示例: 1 2 3 4 5 gaussdb=# SELECT current_schema(); current_schema ---------------- public (1 row) 备注:current_schema返回在搜索路径中第一个顺位有效的模式名。(如果搜索路径为空则返回NULL,没有有效的模式名也返回NULL)。如果创建表或者其他命名对象时没有声明目标模式,则将使用这些对象的模式。 current_schemas(Boolean) 描述:搜索路径中的模式名称。 返回值类型:name[] 示例: 1 2 3 4 5 gaussdb=# SELECT current_schemas(true); current_schemas --------------------- {pg_catalog,public} (1 row) 备注: current_schemas(Boolean)返回搜索路径中所有模式名称的数组。布尔选项决定像pg_catalog这样隐含包含的系统模式是否包含在返回的搜索路径中。 搜索路径可以通过运行时设置更改。命令是: 1 SET search_path TO schema [, schema, ...] current_user 描述:当前执行环境下的用户名。 返回值类型:name 示例: 1 2 3 4 5 gaussdb=# SELECT current_user; current_user -------------- omm (1 row) 备注:current_user是用于权限检查的用户标识。通常,他表示会话用户,但是可以通过SET ROLE改变他。在函数执行的过程中随着属性SECURITY DEFINER的改变,其值也会改变。 definer_current_user 描述:当前执行环境下的用户名。 返回值类型:name 示例: 1 2 3 4 5 gaussdb=# SELECT definer_current_user(); definer_current_user ---------------------- omm (1 row) pg_current_sessionid() 描述:当前执行环境下的会话ID。 返回值类型:text 示例: 1 2 3 4 5 gaussdb=# SELECT pg_current_sessionid(); pg_current_sessionid ---------------------------- 1579228402.140190434944768 (1 row) 备注:pg_current_sessionid()是用于获取当前执行环境下的会话ID。其组成结构为:时间戳.会话ID,当线程池模式开启(enable_thread_pool=on)时,会话ID为SessionID;而线程池模式关闭时,会话ID为ThreadID。 pg_current_sessid 描述:当前执行环境下的会话ID。 返回值类型:text 示例: gaussdb=# select pg_current_sessid(); pg_current_sessid ------------------- 140308875015936 (1 row) 备注:在线程池模式下获得当前会话的会话ID,非线程池模式下获得当前会话对应的后台线程ID。 pg_current_userid 描述:当前用户ID。 返回值类型:text gaussdb=# SELECT pg_current_userid(); pg_current_userid ------------------- 10 (1 row) working_version_num() 描述:版本序号信息。返回一个系统兼容性有关的版本序号。 返回值类型:int 示例: 1 2 3 4 5 gaussdb=# SELECT working_version_num(); working_version_num --------------------- 92231 (1 row) tablespace_oid_name() 描述: 根据表空间oid,查找表空间名称。 返回值类型:text 示例: 1 2 3 4 5 gaussdb=# select tablespace_oid_name(1663); tablespace_oid_name --------------------- pg_default (1 row) inet_client_addr() 描述:连接的远端地址。inet_client_addr返回当前客户端的IP地址。 此函数只有在远程连接模式下有效。 返回值类型:inet 示例: 1 2 3 4 5 gaussdb=# SELECT inet_client_addr(); inet_client_addr ------------------ 10.10.0.50 (1 row) inet_client_port() 描述:连接的远端端口。inet_client_port返回当前客户端的端口号。 此函数只有在远程连接模式下有效。 返回值类型:int 示例: 1 2 3 4 5 gaussdb=# SELECT inet_client_port(); inet_client_port ------------------ 33143 (1 row) inet_server_addr() 描述:连接的本地地址。inet_server_addr返回服务器接收当前连接用的IP地址。 此函数只有在远程连接模式下有效。 返回值类型:inet 示例: 1 2 3 4 5 gaussdb=# SELECT inet_server_addr(); inet_server_addr ------------------ 10.10.0.13 (1 row) inet_server_port() 描述:连接的本地端口。inet_server_port返回接收当前连接的端口号。如果是通过Unix-domain socket连接的,则所有这些函数都返回NULL。 此函数只有在远程连接模式下有效。 返回值类型:int 示例: 1 2 3 4 5 gaussdb=# SELECT inet_server_port(); inet_server_port ------------------ 8000 (1 row) pg_backend_pid() 描述:当前会话连接的服务进程的进程ID。 返回值类型:int 示例: 1 2 3 4 5 gaussdb=# SELECT pg_backend_pid(); pg_backend_pid ----------------- 140229352617744 (1 row) pg_conf_load_time() 描述:配置加载时间。pg_conf_load_time返回最后加载服务器配置文件的时间戳。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 gaussdb=# SELECT pg_conf_load_time(); pg_conf_load_time ------------------------------ 2017-09-01 16:05:23.89868+08 (1 row) pg_my_temp_schema() 描述:会话的临时模式的OID,不存在则为0。 返回值类型:oid 示例: 1 2 3 4 5 gaussdb=# SELECT pg_my_temp_schema(); pg_my_temp_schema ------------------- 0 (1 row) 备注:pg_my_temp_schema返回当前会话中临时模式的OID,如果不存在(没有创建临时表)的话则返回0。如果给定的OID是其它会话中临时模式的OID,pg_is_other_temp_schema则返回true。 pg_is_other_temp_schema(oid) 描述:是否为另一个会话的临时模式。 返回值类型:Boolean 示例: 1 2 3 4 5 gaussdb=# SELECT pg_is_other_temp_schema(25356); pg_is_other_temp_schema ------------------------- f (1 row) pg_listening_channels() 描述:会话正在侦听的信道名称。 返回值类型:setof text 示例: 1 2 3 4 gaussdb=# SELECT pg_listening_channels(); pg_listening_channels ----------------------- (0 rows) 备注:pg_listening_channels返回当前会话正在侦听的一组信道名称。 pg_postmaster_start_time() 描述:服务器启动时间。pg_postmaster_start_time返回服务器启动时的timestamp with time zone。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 gaussdb=# SELECT pg_postmaster_start_time(); pg_postmaster_start_time ------------------------------ 2017-08-30 16:02:54.99854+08 (1 row) pg_get_ruledef(rule_oid) 描述:获取规则的CREATE RULE命令。 返回值类型:text 示例: gaussdb=# select * from pg_get_ruledef(24828); pg_get_ruledef ------------------------------------------------------------------- CREATE RULE t1_ins AS ON INSERT TO t1 DO INSTEAD INSERT INTO t2 (id) VALUES (new.id); (1 row) sessionid2pid() 描述: 从sessionid中得到pid信息(例如,gs_session_stat中sessid列)。 返回值类型: int8 示例: 1 2 3 4 5 6 gaussdb=# select sessionid2pid(sessid::cstring) from gs_session_stat limit 2; sessionid2pid ----------------- 139973107902208 139973107902208 (2 rows) session_context( 'namespace' , 'parameter') 描述:获取并返回指定namespace下参数parameter的值。 返回值类型:VARCHAR 示例: 1 2 3 4 5 gaussdb=# SELECT session_context('USERENV', 'CURRENT_SCHEMA'); session_context ------------------ public (1 row) 备注:当前支持的parameter:current_user, current_schema, client_info, ip_address, sessionid, sid. pg_trigger_depth() 描述:触发器的嵌套层次。 返回值类型:int 示例: 1 2 3 4 5 gaussdb=# SELECT pg_trigger_depth(); pg_trigger_depth ------------------ 0 (1 row) session_user 描述:会话用户名。 返回值类型:name 示例: 1 2 3 4 5 gaussdb=# SELECT session_user; session_user -------------- omm (1 row) 备注:session_user通常是连接当前数据库的初始用户,不过系统管理员可以用SET SESSION AUTHORIZATION修改这个设置。 user 描述:等价于current_user。 返回值类型:name 示例: 1 2 3 4 5 gaussdb=# SELECT user; current_user -------------- omm (1 row) getpgusername() 描述:获取数据库用户名。 返回值类型:name 示例: 1 2 3 4 5 gaussdb=# select getpgusername(); getpgusername --------------- GaussDB_userna (1 row) getdatabaseencoding() 描述:获取数据库编码方式。 返回值类型:name 示例: 1 2 3 4 5 gaussdb=# select getdatabaseencoding(); getdatabaseencoding --------------------- SQL_ASCII (1 row) version() 描述:版本信息。version返回一个描述服务器版本信息的字符串。 返回值类型:text 示例: gaussdb=# select version(); version ------------------------------------------------------------------------------------------------------------------------------------------------------------- gaussdb (GaussDB Kernel 503.1.XXX build fab4f5ea) compiled at 2021-10-24 11:58:22 commit 3086 last mr 6592 release (1 row) opengauss_version() 描述:openGauss版本信息。 返回值类型:text 使用示例如下,查询结果中的x.x.x请已实际输出为准: 1 2 3 4 5 gaussdb=# select opengauss_version(); opengauss_version ------------------- x.x.x (1 row) gs_deployment() 描述:当前系统的部署形态信息。 返回值类型:text 示例: 1 2 3 4 5 gaussdb=# select gs_deployment(); gs_deployment --------------------- BusinessCentralized (1 row) get_hostname() 描述:返回当前节点的hostname。 返回值类型:text 示例: 1 2 3 4 5 gaussdb=# SELECT get_hostname(); get_hostname -------------- linux-user (1 row) get_nodename() 描述:返回当前节点的名字。 返回值类型:text 示例: 1 2 3 4 5 gaussdb=# SELECT get_nodename(); get_nodename -------------- datanode1 (1 row) get_schema_oid(cstring) 描述:返回查询schema的oid。 返回值类型:oid 示例: 1 2 3 4 5 gaussdb=# SELECT get_schema_oid('public'); get_schema_oid ---------------- 2200 (1 row) get_client_info() 描述:返回客户端信息。 返回值类型:record
  • GS_RECYCLEBIN gs_recyclebin描述了回收站对象的详细信息。 表1 gs_recyclebin字段 名称 类型 描述 oid oid 系统列。 rcybaseid oid 基表对象id,引用gs_recyclebin.oid。 rcydbid oid 当前对象所属数据库oid。 rcyrelid oid 当前对象oid。 rcyname name 回收站对象名称,格式“BIN$unique_id$oid$0”,其中unique_id为最多16字符唯一标识,oid为对象标识符。 rcyoriginname name 原始对象名称。 rcyoperation "char" 操作类型。 d表示drop。 t表示truncate。 rcytype integer 对象类型。 0表示table。 1表示index。 2表示toast table。 3表示toast index。 4表示sequence,指serial、bigserial、smallserial、largeserial类型自动关联的序列对象。 5表示partition。 6表示global index。 7表示物化视图。 rcyrecyclecsn bigint 对象drop、truncate时csn。 rcyrecycletime timestamp with time zone 对象drop、truncate时间。 rcycreatecsn bigint 对象创建时csn。 rcychangecsn bigint 对象定义改变的csn。 rcynamespace oid 包含这个关系的名字空间的OID。 rcyowner oid 关系所有者。 rcytablespace oid 这个关系存储所在的表空间。如果为0,则意味着使用该数据库的缺省表空间。如果关系在磁盘上没有文件,则这个字段没有什么意义。 rcyrelfilenode oid 回收站对象在磁盘上的文件的名称,如果没有则为0,用于TRUNCATE对象恢复时物理文件还原。 rcycanrestore boolean 是否可以被单独闪回。 rcycanpurge boolean 是否可以被单独purge。 rcyfrozenxid xid32 该表中所有在这个之前的事务ID已经被一个固定的("frozen")事务ID替换。 rcyfrozenxid64 xid 该表中所有在这个之前的事务ID已经被一个固定的("frozen")事务ID替换。 父主题: 系统表
  • SESSION_STAT 当前节点以会话线程或AutoVacuum线程为单位,统计会话状态信息。 表1 SESSION_STAT字段 名称 类型 描述 sessid text 线程启动时间+线程标识。 statid integer 统计编号。 statname text 统计会话名称。 statunit text 统计会话单位。 value bigint 统计会话值。 父主题: Session/Thread
  • 参数说明 复合类型 name 要创建的类型的名称(可以被模式限定)。 attribute_name 复合类型的一个属性(列)的名称。 data_type 要成为复合类型的一个列的现有数据类型的名称。可以使用%ROWTYPE间接引用表的类型,或者使用%TYPE间接引用表或复合类型中某一列的类型。 collation 要关联到复合类型的一列的现有排序规则的名称。排序规则可以使用“SELECT * FROM pg_collation”命令从pg_collation系统表中查询,默认的排序规则为查询结果中以default开始的行。 基本类型 自定义基本类型时,参数可以以任意顺序出现,input_function和output_function为必选参数,其它为可选参数。 input_function 将数据从类型的外部文本形式转换为内部形式的函数名。 输入函数可以被声明为有一个cstring类型的参数,或者有三个类型分别为cstring、 oid、integer的参数。 cstring参数是以C字符串存在的输入文本。 oid参数是该类型自身的OID(对于数组类型则是其元素类型的OID)。 integer参数是目标列的typmod(如果知道,不知道则将传递 -1)。 输入函数必须返回一个该数据类型本身的值。通常,一个输入函数应该被声明为STRICT。 如果不是这样,在读到一个NULL输入值时,调用输入函数时第一个参数会是NULL。在这种情况下,该函数必须仍然返回NULL,除非调用函数发生了错误(这种情况主要是想支持域输入函数,域输入函数可能需要拒绝NULL输入)。 输入和输出函数能被声明为具有新类型的结果或参数是因为:必须在创建新类型之前创建这两个函数。而新类型应该首先被定义为一种shell type,它是一种占位符类型,除了名称和拥有者之外它没有其他属性。这可以通过不带额外参数的命令CREATE TYPE name做到。然后用C写的I/O函数可以被定义为引用这种shell type。最后,用带有完整定义的CREATE TYPE把该shell type替换为一个完全的、合法的类型定义,之后新类型就可以正常使用了。 输入和输出函数若为internel类型且指定为内部系统函数,则其输入函数和输出函数的参数类型需保持一致,且新类型的INTERNALLENGTH和PASSEDBYVALUE需要与输入函数和输出函数的参数类型保持一致。 output_function 将数据从类型的内部形式转换为外部文本形式的函数名。 输出函数必须被声明为有一个新数据类型的参数。输出函数必须返回类型cstring。对于NULL值不会调用输出函数。 receive_function 可选参数。将数据从类型的外部二进制形式转换成内部形式的函数名。 如果没有该函数,该类型不能参与到二进制输入中。二进制表达转换成内部形式代价更低,然而却更容易移植(例如,标准的整数数据类型使用网络字节序作为外部二进制表达,而内部表达是机器本地的字节序)。receive_function应该执行足够的检查以确保该值是有效的。 接收函数可以被声明为有一个internal类型的参数,或者有三个类型分别为internal、oid、integer的参数。 internal参数是一个指向StringInfo缓冲区的指针,其中保存着接收到的字节串。 oid和integer参数和文本输入函数的相同。 接收函数必须返回一个该数据类型本身的值。通常,一个接收函数应该被声明为STRICT。如果不是这样,在读到一个NULL输入值时调用接收函数时第一个参数会是NULL。在这种情况下,该函数必须仍然返回NULL,除非接收函数发生了错误(这种情况主要是想支持域接收函数,域接收函数可能需要拒绝NULL输入)。 send_function 可选参数。将数据从类型的内部形式转换为外部二进制形式的函数名。 如果没有该函数,该类型将不能参与到二进制输出中。发送函数必须被声明为有一个新数据类型的参数。发送函数必须返回类型bytea。对于NULL值不会调用发送函数。 type_modifier_input_function 可选参数。将类型的修饰符数组转换为内部形式的函数名。 type_modifier_output_function 可选参数。将类型的修饰符的内部形式转换为外部文本形式的函数名。 如果该类型支持修饰符(附加在类型声明上的可选约束,例如,char(5)或numeric(30,2)),则需要可选的type_modifier_input_function以及type_modifier_output_function。GaussDB允许用户定义的类型有一个或者多个简单常量或者标识符作为修饰符。不过,为了存储在系统目录中,该信息必须能被打包到一个非负整数值中。所声明的修饰符会被以cstring数组的形式传递给type_modifier_input_function。 type_modifier_input_function必须检查该值的合法性(如果值错误就抛出一个错误),如果值正确,要返回一个非负integer值,该值将被存储在“typmod”列中。如果类型没有 type_modifier_input_function则类型修饰符将被拒绝。type_modifier_output_function把内部的整数typmod值转换回正确的形式用于用户显示。type_modifier_output_function必须返回一个cstring值,该值就是追加到类型名称后的字符串。例如,numeric的函数可能会返回(30,2)。如果默认的显示格式就是只把存储的typmod整数值放在圆括号内,则允许省略type_modifier_output_function。 analyze_function 可选参数。为该数据类型执行统计分析的函数名的可选参数。 默认情况下,如果该类型有一个默认的B-tree操作符类,ANALYZE将尝试用类型的“equals”和“less-than”操作符来收集统计信息。这种行为对于非标量类型并不合适,因此可以通过指定一个自定义分析函数来覆盖这种行为。分析函数必须被声明为有一个类型为internal的参数,并且返回一个boolean结果。 internallength 可选参数。一个数字常量,用于指定新类型的内部表达的字节长度。默认为变长。 虽然只有I/O函数和其他为该类型创建的函数才知道新类型的内部表达的细节, 但是内部表达的一些属性必须被向GaussDB声明。其中最重要的是internallength。基本数据类型可以是定长的(这种情况下internallength是一个正整数)或者是变长的(把internallength设置为VARIABLE,在内部通过把typlen设置为-1表示)。所有变长类型的内部表达都必须以一个4字节整数开始,internallength定义了总长度。 PASSEDBYVALUE 可选参数。表示这种数据类型的值需要被传值而不是传引用。传值的类型必须是定长的,并且它们的内部表达不能超过Datum类型(某些机器上是4字节,其他机器上是8字节)的尺寸。 alignment 可选参数。该参数指定数据类型的存储对齐需求。如果被指定,必须是char、int2、int4或者double。默认是int4。 允许的值等同于以1、2、4或8字节边界对齐。要注意变长类型的alignment参数必须至少为4,因为它们需要包含一个int4作为它们的第一个组成部分。 storage 可选参数。该数据类型的存储策略。 如果被指定,必须是plain、external、extended或者main。 默认是plain。 plain指定该类型的数据将总是被存储在线内并且不会被压缩。(对定长类型只允许plain) extended 指定系统将首先尝试压缩一个长的数据值,并且将在数据仍然太长的情况下把值移出主表行。 external允许值被移出主表, 但是系统将不会尝试对它进行压缩。 main允许压缩,但是不鼓励把值移出主表(如果没有其他办法让行的大小变得合适,具有这种存储策略的数据项仍将被移出主表,但比起extended以及external项来,这种存储策略的数据项会被优先考虑保留在主表中)。 除plain之外所有的storage值都暗示该数据类型的函数能处理被TOAST过的值。指定的值仅仅是决定一种可TOAST数据类型的列的默认TOAST存储策略,用户可以使用ALTER TABLE SET STORAGE为列选取其他策略。 like_type 可选参数。与新类型具有相同表达的现有数据类型的名称。会从这个类型中复制internallength、 passedbyvalue、 alignment以及storage的值( 除非在这个CREATE TYPE命令的其他地方用显式说明覆盖)。 当新类型的低层实现是以一种现有的类型为参考时,用这种方式指定表达特别有用。 category 可选参数。这种类型的分类码(一个ASCII 字符)。 默认是“用户定义类型”的'U'。为了创建自定义分类, 也可以选择其他 ASCII字符。 preferred 可选参数。如果这种类型是其类型分类中的优先类型则为TRUE,否则为FALSE。默认为假。在一个现有类型分类中创建一种新的优先类型要非常谨慎, 因为这可能会导致很大的改变。 category和preferred参数可以被用来帮助控制在混淆的情况下应用哪一种隐式造型。每一种数据类型都属于一个用单个ASCII 字符命名的分类,并且每一种类型可以是其所属分类中的“首选”。当有助于解决重载函数或操作符时,解析器将优先造型到首选类型(但是只能从同类的其他类型造型)。对于没有隐式转换到或来自任意其他类型的类型,让这些设置保持默认即可。不过,对于有隐式转换的相关类型的组,把它们都标记为属于同一个类别并且选择一种或两种“最常用”的类型作为该类别的首选通常是很有用的。在把一种用户定义的类型增加到一个现有的内建类别(例如,数字或者字符串类型)中时,category参数特别有用。不过,也可以创建新的全部是用户定义类型的类别。对这样的类别,可选择除大写字母之外的任何ASCII 字符。 default 可选参数。数据类型的默认值。如果被省略,默认值是空。 如果用户希望该数据类型的列被默认为某种非空值,可以指定一个默认值。默认值可以用DEFAULT关键词指定(这样一个默认值可以被附加到一个特定列的显式DEFAULT子句覆盖)。 element 可选参数。被创建的类型是一个数组,element指定了数组元素的类型。例如,要定义一个4字节整数的数组(int4), 应指定ELEMENT = int4。 delimiter 可选参数。指定这种类型组成的数组中分隔值的定界符。 可以把delimiter设置为一个特定字符,默认的定界符是逗号(,)。注意定界符是与数组元素类型相关的,而不是数组类型本身相关。 collatable 可选参数。如果这个类型的操作可以使用排序规则信息,则为TRUE。默认为FALSE。 如果collatable为TRUE,这种类型的列定义和表达式可能通过使用COLLATE子句携带有排序规则信息。在该类型上操作的函数的实现负责真正利用这些信息,仅把类型标记为可排序的并不会让它们自动地去使用这类信息。 label 可选参数。与枚举类型的一个值相关的文本标签,其值为长度不超过63个字符的非空字符串。 在创建用户定义类型的时候, GaussDB会自动创建一个与之关联的数组类型,其名称由该元素类型的名称前缀一个下划线组成。
  • 示例 --创建一种复合类型,建表并插入数据以及查询。 gaussdb=# CREATE TYPE compfoo AS (f1 int, f2 text); gaussdb=# CREATE TABLE t1_compfoo(a int, b compfoo); gaussdb=# CREATE TABLE t2_compfoo(a int, b compfoo); gaussdb=# INSERT INTO t1_compfoo values(1,(1,'demo')); gaussdb=# INSERT INTO t2_compfoo SELECT * FROM t1_compfoo; gaussdb=# SELECT (b).f1 FROM t1_compfoo; gaussdb=# SELECT * FROM t1_compfoo t1 JOIN t2_compfoo t2 ON (t1.b).f1=(t1.b).f1; --重命名数据类型。 gaussdb=# ALTER TYPE compfoo RENAME TO compfoo1; --要改变一个用户定义类型compfoo1的所有者为usr1。 gaussdb=# CREATE USER usr1 PASSWORD '********'; gaussdb=# ALTER TYPE compfoo1 OWNER TO usr1; --把用户定义类型compfoo1的模式改变为usr1。 gaussdb=# ALTER TYPE compfoo1 SET SCHEMA usr1; --给一个数据类型增加一个新的属性。 gaussdb=# ALTER TYPE usr1.compfoo1 ADD ATTRIBUTE f3 int; --删除compfoo1类型。 gaussdb=# DROP TYPE usr1.compfoo1 cascade; --删除相关表和用户。 gaussdb=# DROP TABLE t1_compfoo; gaussdb=# DROP TABLE t2_compfoo; gaussdb=# DROP SCHEMA usr1; gaussdb=# DROP USER usr1; --创建一个枚举类型。 gaussdb=# CREATE TYPE bugstatus AS ENUM ('create', 'modify', 'closed'); --添加一个标签值。 gaussdb=# ALTER TYPE bugstatus ADD VALUE IF NOT EXISTS 'regress' BEFORE 'closed'; --重命名一个标签值。 gaussdb=# ALTER TYPE bugstatus RENAME VALUE 'create' TO 'new'; --创建一个集合类型 gaussdb=# CREATE TYPE compfoo_table AS TABLE OF compfoo;
  • 语法格式 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 name; CREATE TYPE name AS ENUM ( [ 'label' [, ... ] ] ); CREATE TYPE name AS TABLE OF data_type;
  • 功能描述 在当前数据库中定义一种新的数据类型。定义数据类型的用户将成为该数据类型的拥有者。类型只适用于行存表。 有五种形式的CREATE TYPE,分别为:复合类型、基本类型、shell类型、枚举类型和集合类型。 复合类型 复合类型由一个属性名和数据类型的列表指定。如果属性的数据类型是可排序的,也可以指定该属性的排序规则。复合类型本质上和表的行类型相同,但是如果只想定义一种类型,使用CREATE TYPE避免了创建一个实际的表。单独的复合类型也是很有用的,例如可以作为函数的参数或者返回类型。 为了能够创建复合类型,必须拥有在其所有属性类型上的USAGE特权。 基本类型 用户可以自定义一种新的基本类型(标量类型)。通常来说这些函数必须是底层语言所编写。 shell类型 shell类型是一种用于后面要定义的类型的占位符,通过发出一个不带除类型名之外其他参数的CREATE TYPE命令可以创建这种类型。在创建基本类型时,需要shell类型作为一种向前引用。 枚举类型 由若干个标签构成的列表,每一个标签值都是一个非空字符串,且字符串长度必须不超过63个字节。 集合类型 类似数组,但是没有长度限制,主要在存储过程中使用。 被授予CREATE ANY TYPE权限的用户,可以在public模式和用户模式下创建类型。
  • ecpg预处理以及编译执行 准备嵌入式SQL-C源程序,以.pgc为后缀名,ecpg负责将其转换成可被编译器编译的C语言程序。 生成的C语言程序被编译器编译为可执行文件,运行该可执行文件实现客户端程序访问数据库。示例请参见常用示例章节。 ecpg预处理以及编译处理过程 预处理:ecpg -I $GAUSSHOME/include -o test.c test.pgc ecpg预处理的参数选项如下: ecpg [OPTION]... 其中OPTION参数选项如下: -o OUTFILE:预处理嵌入式SQL-C程序将结果写入OUTFILE,OUTFILE为C语言文件。 -I DIRECTORY:头文件的搜索路径。 -c:预处理嵌入式SQL-C程序自动生成C语言文件。 --version:查看ecpg当前版本。 编译:gcc -I $GAUSSHOME/include/ecpg -I $GAUSSHOME/include -I $GAUSSHOME/include/postgresql/server/ -L $GAUSSHOME/lib -lecpg -lrt -lpq -lpgtypes -lpthread test_ecpg.c -o test_ecpg 执行:./test ecpg作为编译预处理工具,若在预处理或编译过程中出现找不到头文件或者函数实现的报错信息,可以根据需要指定头文件,或者链接动态库。 ecpg需要gcc、ld等编译预处理工具,建议gcc使用7.3.0版本。 使用ecpg开发应用程序所依赖的其他动态库和头文件,常见的位于$GAUSSHOME/include/libpq, $GAUSSHOME/include。 编译过程中常见的动态库依赖:-lpq、-lpq_ce、-lpthread。若开发过程中需要使用libpq通信库,则需要连接-lpq和-lpq_ce。若开发过程中需要使用多线程连接,则需要连接-lpthread。 父主题: 基于ecpg开发
  • STAT_ALL_TABLES 显示数据库当前节点每个表(包括TOAST表)的状态信息。 表1 STAT_ALL_TABLES字段 名称 类型 描述 relid oid 表的OID。 schemaname name 该表所在的Schema名。 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
  • ADM_COLL_TYPES ADM_COLL_TYPES视图显示所有集合类型的信息。默认只有系统管理员权限才可以访问此系统视图,普通用户需要授权才可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 ADM_COLL_TYPES字段 名称 类型 描述 owner character varying(128) 集合的所有者。 type_name character varying(128) 集合的名称。 coll_type character varying(128) 集合的描述。 upper_bound numeric 暂不支持,值为NULL。 elem_type_mod character varying(7) 暂不支持,值为NULL。 elem_type_owner character varying(128) 集合基于的元素类型的所有者。该值主要用于用户定义的类型。 elem_type_name character varying(128) 集合所依据的数据类型或用户定义类型的名称。 length numeric 暂不支持,值为NULL。 precision numeric 暂不支持,值为NULL。 scale numeric 暂不支持,值为NULL。 character_set_name character varying(44) 暂不支持,值为NULL。 elem_storage character varying(7) 暂不支持,值为NULL。 nulls_stored character varying(3) 暂不支持,值为NULL。 char_used character varying(1) 暂不支持,值为NULL。 父主题: 系统视图
  • GV_INSTANCE GV_INSTANCE视图显示当前数据库实例的信息。默认只有系统管理员权限才可以访问此系统视图,普通用户需要授权才可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 GV_INSTANCE字段 名称 类型 描述 inst_id oid 当前数据库oid。 instance_number oid 当前数据库oid。 instance_name character varying(16) 当前数据库名。 host_name character varying(64) 暂不支持,值为NULL。 version character varying(17) 暂不支持,值为NULL。 version_legacy character varying(17) 暂不支持,值为NULL。 version_full character varying(17) 暂不支持,值为NULL。 startup_time timestamp(0) without time zone 暂不支持,值为NULL。 status character varying(12) 暂不支持,值为NULL。 parallel character varying(3) 暂不支持,值为NULL。 thread# numeric 暂不支持,值为NULL。 archiver character varying(7) 暂不支持,值为NULL。 log_switch_wait character varying(15) 暂不支持,值为NULL。 logins character varying(10) 暂不支持,值为NULL。 shutdown_pending character varying(3) 暂不支持,值为NULL。 database_status character varying(17) 暂不支持,值为NULL。 instance_role character varying(18) 暂不支持,值为NULL。 active_state character varying(9) 暂不支持,值为NULL。 blocked character varying(3) 暂不支持,值为NULL。 con_id numeric 暂不支持,值为NULL。 instance_mode character varying(11) 暂不支持,值为NULL。 edition character varying(7) 暂不支持,值为NULL。 family character varying(80) 暂不支持,值为NULL。 database_type character varying(15) 暂不支持,值为NULL。 父主题: 系统视图
  • GS_AUDITING_ACCESS GS_AUDITING_ACCESS视图显示对数据库DML相关操作的所有审计信息。需要有系统管理员或安全策略管理员权限才可以访问此视图。 表1 GS_AUDITING_ACCESS字段 名称 类型 描述 polname name 策略名称,需要唯一,不可重复。 pol_type text 审计策略类型,值为‘access’,表示审计DML操作。 polenabled boolean 策略是否启动。 t(true):启动。 f(false):不启动。 access_type name DML数据库操作相关类型。例如SELECT、INSERT、DELETE等。 label_name name 资源标签名称。对应系统表gs_auditing_policy中的polname字段。 access_object text 数据库资产的路径。 filter_name text 过滤条件的逻辑字符串。 父主题: 系统视图
共100000条