华为云用户手册

  • 安全管理员 安全管理员是指具有CREATEROLE属性的账户,具有创建、修改、删除用户或角色的权限。 要创建新的安全管理员,三权分立关闭时,请以系统管理员或者安全管理员身份连接数据库。三权分立打开时,请以安全管理员身份连接数据库,并使用带CREATEROLE选项的CREATE USER语句或 ALTER USER语句进行设置。 1 gaussdb=# CREATE USER createrole WITH CREATEROLE password "********"; 或者 1 gaussdb=# ALTER USER joe CREATEROLE; ALTER USER时,要求用户已存在。
  • 监控管理员 监控管理员是指具有MONADMIN属性的账户,具有查看dbe_perf模式下视图和函数的权限,亦可以对dbe_perf模式的对象权限进行授予或收回。 要创建新的监控管理员,请以系统管理员身份连接数据库,并使用带MONADMIN选项的CREATE USER语句或ALTER USER语句进行设置。 1 gaussdb=# CREATE USER monadmin WITH MONADMIN password "********"; 或者 1 gaussdb=# ALTER USER joe MONADMIN; ALTER USER时,要求用户已存在。
  • 审计管理员 审计管理员是指具有AUDITADMIN属性的账户,具有查看和删除审计日志的权限。 要创建新的审计管理员,三权分立关闭时,请以系统管理员或者安全管理员身份连接数据库。三权分立打开时,只能以初始用户身份连接数据库,并使用带AUDITADMIN选项的CREATE USER语句或 ALTER USER语句进行设置。 1 gaussdb=# CREATE USER auditadmin WITH AUDITADMIN password "********"; 或者 1 gaussdb=# ALTER USER joe AUDITADMIN; ALTER USER时,要求用户已存在。
  • 初始用户 集群安装过程中自动生成的账户称为初始用户。初始用户也是系统管理员、安全管理员、审计管理员、监控管理员、运维管理员和安全策略管理员,拥有系统的最高权限,能够执行所有的操作。如果安装时不设置初始用户名称,则该账户与进行集群安装的操作系统用户同名。如果在安装集群时不设置初始用户的密码,安装完成后密码为空,在执行其他操作前需要通过gsql客户端设置初始用户的密码。如果初始用户密码为空,则除修改密码外无法执行其他SQL操作以及升级、扩容、节点替换等操作。 初始用户会绕过所有权限检查。建议仅将此初始用户作为DBA管理用途,而非业务应用。
  • 系统管理员 系统管理员是指具有SYSADMIN属性的账户,默认安装情况下具有与对象所有者相同的权限,但不包括dbe_perf模式的对象权限和使用Roach工具执行备份恢复的权限。 要创建新的系统管理员,请以初始用户或者系统管理员用户身份连接数据库,并使用带SYSADMIN选项的CREATE USER语句或ALTER USER语句进行设置。 1 gaussdb=# CREATE USER sysadmin WITH SYSADMIN password "********"; 或者 1 gaussdb=# ALTER USER joe SYSADMIN; ALTER USER时,要求用户已存在。
  • PG_AMPROC PG_AMPROC系统表存储有关与访问方法操作符族相关联的支持过程的信息。每个属于某个操作符族的支持过程都占有一行。 表1 PG_AMPROC字段 名称 类型 引用 描述 oid oid - 行标识符(隐含字段,必须明确选择)。 amprocfamily oid PG_OPFAMILY.oid 该项的操作符族。 amproclefttype oid PG_TYPE.oid 相关操作符的左输入数据类型。 常见的数据类型请参见数据类型。 amprocrighttype oid PG_TYPE.oid 相关操作符的右输入数据类型。 常见的数据类型请参见数据类型。 amprocnum smallint - 支持过程编号。 amproc regproc PG_PROC .proname 过程的OID。 amproclefttype和amprocrighttype字段的习惯解释,标识一个特定支持过程支持的操作符的左和右输入类型。对于某些访问方式,匹配支持过程本身的输入数据类型,对其他的则不这样。有一个对索引的“缺省”支持过程的概念,amproclefttype和amprocrighttype都等于索引操作符类的opcintype。 父主题: 系统表
  • DB_TAB_COMMENTS DB_TAB_COMMENTS视图显示当前用户可访问的所有表和视图的注释信息。该视图同时存在于PG_CATA LOG 和SYS Schema下。 表1 DB_TAB_COMMENTS字段 名称 类型 描述 owner character varying(128) 表或视图的所有者。 table_name character varying(128) 表或视图的名称。 table_type character varying(11) 对象类型。 comments text 注释。 origin_con_id numeric 暂不支持,值为0。 schema character varying(64) 表所属的名称空间的名称。 父主题: 系统视图
  • replconninfo2 参数说明:设置本端侦听和鉴权的第二个节点信息。集群安装成功后自动配置无需手动修改。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符串。其中空字符串表示没有配置第二个节点信息。 默认值:DN侦听的第二个连接信息。 示例: replconninfo2 = 'localhost=127.0.0.1 localport=XXXX localheartbeatport=XXXX localservice=XXXX remotehost=127.0.0.1 remoteport=XXXX remoteheartbeatport=XXXX remoteservice=XXXX'
  • replconninfo3 参数说明:设置本端侦听和鉴权的第三个节点信息。集群安装成功后自动配置无需手动修改。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符串。其中空字符串表示没有配置第三个节点信息。 默认值:DN侦听的第三个连接信息。 示例: replconninfo3 = 'localhost=127.0.0.1 localport=XXXX localheartbeatport=XXXX localservice=XXXX remotehost=127.0.0.1 remoteport=XXXX remoteheartbeatport=XXXX remoteservice=XXXX'
  • replconninfo6 参数说明:设置本端侦听和鉴权的第六个节点信息。集群安装成功后自动配置无需手动修改。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符串。其中空字符串表示没有配置第六个节点信息。 默认值:DN侦听的第六个连接信息。 示例: replconninfo6 = 'localhost=127.0.0.1 localport=XXXX localheartbeatport=XXXX localservice=XXXX remotehost=127.0.0.1 remoteport=XXXX remoteheartbeatport=XXXX remoteservice=XXXX'
  • max_replication_slots 参数说明:设置主机端的日志复制slot个数。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,0 ~ 1024(建议取值范围:8 ~ 100) 默认值:20 设置建议: 当使用双机复制、备份恢复、逻辑解码时,该参数值建议设为:当前物理流复制槽数+备份槽数+所需的逻辑复制槽数。 如果实际设置值比上述建议值小,可能造成这些功能不可用或异常。 物理流复制槽提供了一种自动化的方法来确保主DN在所有备DN收到xlog之前,xlog不会被移除。也就是说物理流复制槽用于支撑集群HA。集群所需要的物理流复制槽数为:一组DN中,备与主DN之间的比例。例如,假设集群的DN高可用方案为1主、1备,则所需物理流复制槽数为1。又例如,假设集群的DN高可用方案为1主3备,则所需物理流复制槽数为3。 备份槽:记录备份执行过程中的一些复制信息,全量备份和增量备份各自对应单独的备份槽,共2个。 关于逻辑复制槽数,请按如下规则考虑。 一个逻辑复制槽只能解码一个Database的修改,如果需要解码多个Database,则需要创建多个逻辑复制槽。 如果需要多路逻辑复制同步给多个目标数据库,在源端数据库需要创建多个逻辑复制槽,每个逻辑复制槽对应一条逻辑复制链路。
  • repl_uuid 参数说明:设置用于主备UUID验证的UUID码。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 如果主机上开启了UUID验证功能、且配置了非空字符串的repl_uuid验证码,那么备机也需要开启UUID验证功能、且配置相同的repl_uuid验证码,否则主备日志复制和备机重建请求将被主机拒绝。 该参数支持SIGHUP动态加载新值。修改之后,不影响已建连的主备连接,对后续主备复制请求和主备重建请求生效。 支持Quorum、DCF协议下的备机重建验证;支持Quorum协议下的主备复制验证;不支持DCF协议下的主备复制验证。 不支持跨集群主、备之间的认证,包括Dorado主备集群和容灾主备集群。 UUID验证功能主要为了防止主、备误连导致的数据串扰和污染,不是用于安全目的。 该参数不支持主、备间自动同步。 取值范围:字符串类型。长度0~63个字符,字母和数字的组合,大小写不敏感,内部统一转换为小写存储。空字符串表示不启用UUID验证功能。 默认值:空字符串
  • replconninfo1 参数说明:设置本端侦听和鉴权的第一个节点信息。集群安装成功后自动配置无需手动修改。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符串。其中空字符串表示没有配置第一个节点信息。 默认值:DN侦听的第一个连接信息。 示例: replconninfo1 = 'localhost=127.0.0.1 localport=XXXX localheartbeatport=XXXX localservice=XXXX remotehost=127.0.0.1 remoteport=XXXX remoteheartbeatport=XXXX remoteservice=XXXX'
  • replconninfo4 参数说明:设置本端侦听和鉴权的第四个节点信息。集群安装成功后自动配置无需手动修改。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符串。其中空字符串表示没有配置第四个节点信息。 默认值:DN侦听的第四个连接信息。 示例: replconninfo4 = 'localhost=127.0.0.1 localport=XXXX localheartbeatport=XXXX localservice=XXXX remotehost=127.0.0.1 remoteport=XXXX remoteheartbeatport=XXXX remoteservice=XXXX'
  • repl_auth_mode 参数说明:设置主备复制和备机重建的验证模式。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 如果主机上开启了UUID验证功能、且配置了非空字符串的repl_uuid验证码,那么备机也需要开启UUID验证功能、且配置相同的repl_uuid验证码,否则主备日志复制和备机重建请求将被主机拒绝。 该参数支持SIGHUP动态加载新值。修改之后不影响已建连的主备连接,对后续主备复制请求和主备重建请求生效。 支持Quorum、DCF协议下的备机重建验证;支持Quorum协议下的主备复制验证;不支持DCF协议下的主备复制验证。 不支持跨集群主、备之间的认证,包括Dorado主备集群和容灾主备集群。 UUID验证功能主要为了防止主、备误连导致的数据串扰和污染,不是用于安全目的。 该参数不支持主、备间自动同步。 取值范围:枚举类型 off:表示关闭UUID验证功能。 default:表示关闭UUID验证功能。 uuid:表示开启UUID验证功能。 默认值:default
  • replconninfo5 参数说明:设置本端侦听和鉴权的第五个节点信息。集群安装成功后自动配置无需手动修改。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符串。其中空字符串表示没有配置第五个节点信息。 默认值:DN侦听的第五个连接信息。 示例: replconninfo5 = 'localhost=127.0.0.1 localport=XXXX localheartbeatport=XXXX localservice=XXXX remotehost=127.0.0.1 remoteport=XXXX remoteheartbeatport=XXXX remoteservice=XXXX'
  • replconninfo7 参数说明:设置本端侦听和鉴权的第七个节点信息。集群安装成功后自动配置无需手动修改。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符串。其中空字符串表示没有配置第七个节点信息。 默认值:DN侦听的第七个连接信息。 示例: replconninfo7 = 'localhost=127.0.0.1 localport=XXXX localheartbeatport=XXXX localservice=XXXX remotehost=127.0.0.1 remoteport=XXXX remoteheartbeatport=XXXX remoteservice=XXXX'
  • thread_top_level 参数说明:提高 WALWRITERAUXILIARY || WALWRITER || STARTUP ||WALRECEIVER || WAL_NORMAL_SENDER || PGSTAT线程的优先级到最高。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on表示上述线程优先级提高到最高。 off表示不提高上述线程优先级。 默认值:off
  • enable_wal_shipping_compression 参数说明:在流式容灾模式下设置启动跨集群日志压缩功能。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 该参数仅作用于流式容灾中跨集群传输的一对walsender与walreceiver中,在主集群上配置。 取值范围:布尔型 true 表示打开流式容灾跨集群日志压缩 false 表示关闭流式容灾跨集群日志压缩 默认值:false
  • wal_keep_segments 参数说明:“pg_xlog”目录下保留事务日志文件的最小数目。备机通过获取主机此处的日志进行流复制。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,2 ~ INT_MAX 默认值:128 设置建议: 当服务器开启日志归档或者从检查点恢复时,保留的日志文件数量可能大于wal_keep_segments设定的值。 如果此参数设置过小,则在备机请求事务日志时,此事务日志可能已经被产生的新事务日志覆盖,导致请求失败,主备关系断开。 当双机为异步传输时,以COPY方式连续导入4G以上数据需要增大wal_keep_segments配置。以T6000单板为例,如果导入数据量为50G,建议调整参数为1000。您可以在导入完成并且日志同步正常后,动态恢复此参数设置。
  • max_wal_senders 参数说明:指定事务日志发送进程的并发连接最大数量。不可大于等于max_connections。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 wal_level必须设置为archive、hot_standby或者logical以允许备机的连接。 取值范围:整型,0 ~ 1024(建议取值范围:8 ~ 100) 只有当使用单DN实例无主备场景下才可以设置0。 默认值: 设置建议:每个备机与主机的日志复制连接均会占用一个walsender线程,因此此参数务必大于等于DN数量,否则会导致备机无法连接主机。当有逻辑复制需求时,每个日志抽取线程会占用一个walsender线程,有逻辑复制时需要设置max_wal_senders大于备机+逻辑复制抽取线程的数量。
  • wal_sender_timeout 参数说明:设置本端等待事务日志接收端接收日志的最大等待时间。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 如果主机数据较大,重建操作需要增大此参数的值,主机数据在500GB时,此参数的参考值为600s。 此值不能大于wal_receiver_timeout或数据库重建时的超时参数。 取值范围:整型,0 ~ 2147483647‬,单位为毫秒(ms)。 默认值:6s
  • 注意事项 PQprepare创建一个为PQexecPrepared执行用的预备语句,本特性支持命令的重复执行,不需要每次都进行解析和规划。PQprepare仅在协议3.0及以后的连接中支持,使用协议2.0时,PQprepare将失败。 该函数从查询字符串创建一个名为stmtName的预备语句,该查询字符串必须包含一个SQL命令。stmtName可以是""来创建一个未命名的语句,在这种情况下,任何预先存在的未命名的语句都将被自动替换,否则,如果在当前会话中已经定义了语句名称,那么这就是一个错误。如果使用了任何参数,那么在查询中将它们称为$1,$2等。nParams是在paramTypes[]数组中预先指定类型的参数的数量。(当nParams为0时,数组指针可以为NULL),paramTypes[]通过OID指定要分配给参数符号的数据类型。如果paramTypes为NULL,或者数组中的任何特定元素为零,服务器将按照对非类型化字面字符串的相同方式为参数符号分配数据类型。另外,查询可以使用数字高于nParams的参数符号,还将推断这些符号的数据类型。 通过执行SQLPREPARE语句,还可以创建与PQexecPrepared一起使用的预备语句。此外,虽然没有用于删除预备语句的libpq函数,但是SQL DEALLOCATE语句可用于此目的。
  • 背景信息 当客户在使用数据库过程中,如果白天执行一些耗时比较长的任务(例如:统计数据汇总之类或从其他数据库同步数据的任务),会对正常的业务有性能影响,所以客户经常选择在晚上执行,无形中增加了客户的工作量。因此数据库兼容ORA数据库中定时任务的功能,可以由客户创建定时任务,当任务时间点到达后可以自动触发任务的执行,从而可以减少客户运维的工作量。 数据库兼容ORA定时任务功能主要通过DBE_SCHEDULER和DBE_TASK高级包提供的接口,可以实现定时任务的创建、任务到期自动执行、任务删除和修改任务属性(包括:任务id、任务的关闭开启、任务的触发时间、触发时间间隔和任务内容等)。推荐使用DBE_SCHEDULER接口,保证高可用性、高可靠性,并且支持更灵活的任务调度。接口说明、迁移指导示例请参见DBE_SCHEDULER章节。
  • 定时任务管理 创建测试表。 1 gaussdb=# CREATE TABLE test(id int, time date); 当结果显示为如下信息,则表示创建成功。 1 CREATE TABLE 创建自定义存储过程。 1 2 3 4 5 6 7 8 9 gaussdb=# CREATE OR REPLACE PROCEDURE PRC_JOB_1() AS N_NUM integer :=1; BEGIN FOR I IN 1..1000 LOOP INSERT INTO test VALUES(I,SYSDATE); END LOOP; END; / 当结果显示为如下信息,则表示创建成功。 1 CREATE PROCEDURE 创建任务。 新创建的任务(未指定job_id)表示每隔1分钟执行一次存储过程PRC_JOB_1。 1 2 3 4 5 gaussdb=# call dbe_task.submit('call public.prc_job_1(); ', sysdate, 'interval ''1 minute''', :a); job ----- 1 (1 row) 指定job_id创建任务,其中job_id可用范围为1~32767。 1 2 3 4 5 gaussdb=# call dbe_task.id_submit(2,'call public.prc_job_1(); ', sysdate, 'interval ''1 minute'''); isubmit --------- (1 row) 通过视图查看当前用户已创建的任务信息。 1 2 3 4 5 gaussdb=# select job,dbname,start_date,last_date,this_date,next_date,broken,status,interval,failures,what from my_jobs; job | dbname | start_date | last_date | this_date | next_date | broken | status | interval | failures | what -----+--------+---------------------+----------------------------+----------------------------+---------------------+--------+--------+---------------------+----------+--------------------------- 1 | testdb | 2017-07-18 11:38:03 | 2017-07-18 13:53:03.607838 | 2017-07-18 13:53:03.607838 | 2017-07-18 13:54:03 | n | s | interval '1 minute' | 0 | call public.prc_job_1(); (1 row) 停止任务。 1 2 3 4 5 gaussdb=# call dbe_task.finish(1,true); broken -------- (1 row) 启动任务。 1 2 3 4 5 gaussdb=# call dbe_task.finish(1,false); broken -------- (1 row) 修改任务属性。 修改JOB的next_time参数信息。 1 2 3 4 5 6 --修改Job1的next_time为1小时以后开始执行。 gaussdb=# call dbe_task.next_time(1, sysdate+1.0/24); next_date ----------- (1 row) 修改JOB的Interval参数信息。 1 2 3 4 5 6 --修改Job1的Interval为每隔1小时执行一次。 gaussdb=# call dbe_task.interval(1,'sysdate + 1.0/24'); interval ---------- (1 row) 修改JOB的What参数信息。 1 2 3 4 5 6 --修改Job1的What为执行SQL语句“insert into public.test values(333, sysdate+5);”。 gaussdb=# call dbe_task.content(1,'insert into public.test values(333, sysdate+5);'); what ------ (1 row) 同时修改JOB的Next_date、Interval、What等多个参数信息。 1 2 3 4 5 gaussdb=# call dbe_task.update(1, 'call public.prc_job_1();', sysdate, 'interval ''1 minute'''); change -------- (1 row) 删除JOB。 1 2 3 4 5 gaussdb=# call dbe_task.cancel(1); remove -------- (1 row) 查看JOB执行情况。 当JOB自动执行时,如果JOB执行失败(即job_status状态值为'f')时,请联系管理员查看pg_log的运行日志来查看JOB的失败信息。 日志信息如下所示,从失败信息(detail error msg)中可以查看失败的具体错误。 LOG: Execute Job Detail: job_id: 1 what: call public.test(); start_date: 2017-07-19 23:30:47.401818 job_status: failed detail error msg: relation "test" does not exist end_date: 2017-07-19 23:30:47.401818 next_run_date: 2017-07-19 23:30:56.855827 JOB的权限控制。 当创建一个JOB时,该JOB会和创建该JOB的数据库和用户绑定(即:pg_job系统表新增的JOB记录中的dbname和log_user)。 如果当前用户是DBA用户、系统管理员或该JOB的创建用户(即:pg_job中的log_user),那么该用户有权限通过高级包接口remove、change、next_data、what、interval删除或修改JOB的参数信息。否则,会提示当前用户没有权限操作该JOB。 如果当前数据库是该JOB创建所属的数据库(即:pg_job系统表中的dbname),那么连接到当前数据库上可以通过高级包接口cancel、update、next_data、content、interval删除或修改JOB的参数信息。 当删除JOB所属的数据库(即:pg_job系统表中的dbname)时,系统会关联删除该数据库从属的JOB记录。 当删除JOB所属的用户(即:pg_job系统表中的log_user)时,系统会关联删除该用户从属的JOB记录。 JOB的并发控制管理。 用户可以通过配置GUC参数job_queue_processes调整并发同时执行的JOB数目。 当job_queue_processes为0时,表示不启用定时任务功能,任何job都不会被执行。 当job_queue_processes为大于0时,表示启用定时任务功能且系统能够并发处理的最大任务数。 由于并行运行的任务数太多会消耗更多的系统资源,因此需要设置系统并发处理的任务数,当前并发的任务数达到job_queue_processes时,且此时又有任务到期,那么这些任务本次得不到执行而延期到下一轮询周期。因此,建议用户需要根据每个任务的执行时长合理地设置任务的时间间隔(即submit接口中的interval参数),来避免由于任务执行时间太长而导致下个轮询周期无法正常执行。 注:对于不使用JOB的集群中,用户可以通过在集群安装初始化完成后,通过设置job_queue_processes为0来关闭JOB功能,减少系统资源的消耗。
  • GLOBAL_REDO_STATUS GLOBAL_REDO_STATUS视图显示整个集群所有实例的日志回放情况。 表1 GLOBAL_REDO_STATUS字段 名称 类型 描述 node_name text 实例名称。 redo_start_ptr bigint 当前实例日志回放的起始点。 redo_start_time bigint 当前实例日志回放的起始UTC时间。 redo_done_time bigint 当前实例日志回放的结束UTC时间。 curr_time bigint 当前实例的当前UTC时间。 min_recovery_point bigint 当前实例日志的完成回放后可对外提供服务的最小一致性点。 read_ptr bigint 当前实例日志的读取位置。 last_replayed_read_ptr bigint 当前实例的日志回放位置。 recovery_done_ptr bigint 当前实例启动完成时的回放位置。 read_xlog_io_counter bigint 当前实例读取回放日志的I/O次数计数。 read_xlog_io_total_dur bigint 当前实例读取回放日志的I/O总用时。 read_data_io_counter bigint 当前实例日志回放过程中读取数据页面的I/O次数计数。 read_data_io_total_dur bigint 当前实例日志回放过程中读取数据页面的I/O总用时。 write_data_io_counter bigint 当前实例日志回放过程中写数据页面的I/O次数计数。 write_data_io_total_dur bigint 当前实例日志回放过程中写数据页面的I/O总用时。 process_pending_counter bigint 当前实例日志回放过程中日志分发线程的同步次数计数。 process_pending_total_dur bigint 当前实例日志回放过程中日志分发线程的同步总用时。 apply_counter bigint 当前实例日志回放过程中回放线程的同步次数计数。 apply_total_dur bigint 当前实例日志回放过程中回放线程的同步总用时。 speed bigint 当前实例日志回放速率,每回放256MB日志该值更新一次,单位byte/s。 在集群环境下,建议使用cm_ctl query -rv命令来获取更精确的备机回放速度(cm_ctl命令请参考《工具参考》中“统一集群管理工具”章节)。 local_max_ptr bigint 当前实例启动成功后本地收到的回放日志的最大值。 primary_flush_ptr bigint 主机落盘日志的位置。 worker_info text 当前实例回放线程信息,若没有开并行回放则该值为空。 父主题: Utility
  • 更多优化示例 示例1:修改基表为replication表,并且在过滤列上创建索引。 1 2 3 create table master_table (a int); create table sub_table(a int, b int); select a from master_table group by a having a in (select a from sub_table); 上述事例中存在一个相关性子查询,为了提升查询的性能,建表时,可以将sub_table修改为一个replication表,并且在字段a上创建一个index。
  • 数值类型 表1列出了所有的可用类型。数字操作符和相关的内置函数请参见数字操作函数和操作符。 表1 整数类型 名称 描述 存储空间 范围 TINYINT 微整数,别名为INT1。 1字节 0 ~ +255 SMALLINT 小范围整数,别名为INT2。 2字节 -32,768 ~ +32,767 INTEGER 常用的整数,别名为INT4。 4字节 -2,147,483,648 ~ +2,147,483,647 BINARY_INTEGER 常用的整数INTEGER的别名。 4字节 -2,147,483,648 ~ +2,147,483,647 BIGINT 大范围的整数,别名为INT8。 8字节 -9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807 int16 十六字节的大范围整数,目前不支持用户用于建表等使用。 16字节 -170,141,183,460,469,231,731,687,303,715,884,105,728 ~ +170,141,183,460,469,231,731,687,303,715,884,105,727 示例: --创建具有TINYINT类型数据的表。 gaussdb=# CREATE TABLE int_type_t1 ( IT_COL1 TINYINT ); --插入数据。 gaussdb=# INSERT INTO int_type_t1 VALUES(10); --查看数据。 gaussdb=# SELECT * FROM int_type_t1; it_col1 --------- 10 (1 row) --删除表。 gaussdb=# DROP TABLE int_type_t1; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 --创建具有TINYINT,INTEGER,BIGINT类型数据的表。 gaussdb=# CREATE TABLE int_type_t2 ( a TINYINT, b TINYINT, c INTEGER, d BIGINT ); --插入数据。 gaussdb=# INSERT INTO int_type_t2 VALUES(100, 10, 1000, 10000); --查看数据。 gaussdb=# SELECT * FROM int_type_t2; a | b | c | d -----+----+------+------- 100 | 10 | 1000 | 10000 (1 row) --删除表。 gaussdb=# DROP TABLE int_type_t2; TINYINT、SMALLINT、INTEGER、BIGINT和INT16类型存储各种范围的数字,即整数。如果存储超出范围以外的数值将会导致错误。 常用的类型是INTEGER,因为它提供了在范围、存储空间、性能之间的最佳平衡。一般只有取值范围确定不超过SMALLINT的情况下,才会使用SMALLINT类型。而只有在INTEGER的范围不够的时候才使用BIGINT,因为INTEGER的处理速度相对快得多。 表2 任意精度类型 名称 描述 存储空间 范围 NUMERIC[(p[,s])], DECIMAL[(p[,s])] 精度p取值范围为[1,1000],标度s取值范围为[0,p]。 说明: p为总位数,s为小数位数。 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。 NUMBER[(p[,s])] NUMERIC类型的别名。 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。 示例: --创建表。 gaussdb=# CREATE TABLE decimal_type_t1 ( DT_COL1 DECIMAL(10,4) ); --插入数据。 gaussdb=# INSERT INTO decimal_type_t1 VALUES(123456.122331); --查询表中的数据。 gaussdb=# SELECT * FROM decimal_type_t1; dt_col1 ------------- 123456.1223 (1 row) --删除表。 gaussdb=# DROP TABLE decimal_type_t1; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 --创建表。 gaussdb=# CREATE TABLE numeric_type_t1 ( NT_COL1 NUMERIC(10,4) ); --插入数据。 gaussdb=# INSERT INTO numeric_type_t1 VALUES(123456.12354); --查询表中的数据。 gaussdb=# SELECT * FROM numeric_type_t1; nt_col1 ------------- 123456.1235 (1 row) --删除表。 gaussdb=# DROP TABLE numeric_type_t1; 与整数类型相比,任意精度类型需要更大的存储空间,其存储效率、运算效率以及压缩比效果都要差一些。在进行数值类型定义时,优先选择整数类型。当数值超出整数可表示最大范围时,再选用任意精度类型。 使用NUMERIC/DECIMAL进行列定义时,建议指定该列的精度p以及标度s。 表3 序列整型 名称 描述 存储空间 范围 SMALLSERIAL 二字节序列整型。 2字节。 -32,768 ~ +32,767。 SERIAL 四字节序列整型。 4字节。 -2,147,483,648 ~ +2,147,483,647。 BIGSERIAL 八字节序列整型。 8字节。 -9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807。 示例: 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 --创建表。 gaussdb=# CREATE TABLE smallserial_type_tab(a SMALLSERIAL); --插入数据。 gaussdb=# INSERT INTO smallserial_type_tab VALUES(default); --再次插入数据。 gaussdb=# INSERT INTO smallserial_type_tab VALUES(default); --查看数据。 gaussdb=# SELECT * FROM smallserial_type_tab; a --- 1 2 (2 rows) --创建表。 gaussdb=# CREATE TABLE serial_type_tab(b SERIAL); --插入数据。 gaussdb=# INSERT INTO serial_type_tab VALUES(default); --再次插入数据。 gaussdb=# INSERT INTO serial_type_tab VALUES(default); --查看数据。 gaussdb=# SELECT * FROM serial_type_tab; b --- 1 2 (2 rows) --创建表。 gaussdb=# CREATE TABLE bigserial_type_tab(c BIGSERIAL); --插入数据。 gaussdb=# INSERT INTO bigserial_type_tab VALUES(default); --再次插入数据。 gaussdb=# INSERT INTO bigserial_type_tab VALUES(default); --查看数据。 gaussdb=# SELECT * FROM bigserial_type_tab; c --- 1 2 (2 rows) --删除表。 gaussdb=# DROP TABLE smallserial_type_tab; gaussdb=# DROP TABLE serial_type_tab; gaussdb=# DROP TABLE bigserial_type_tab; SMALLSERIAL、SERIAL和BIGSERIAL类型不是真正的类型,只是为在表中设置唯一标识做的概念上的便利。因此,创建一个整数字段,并且把它的缺省数值安排为从一个序列发生器读取。应用了一个NOT NULL约束以确保NULL不会被插入。在大多数情况下用户可能还希望附加一个UNIQUE或PRIMARY KEY约束避免意外地插入重复的数值,但这个不是自动的。最后,序列发生器将从属于该字段,这样当该字段或表被删除的时候也一并删除它。目前只支持在创建表时候指定SERIAL列,不可以在已有的表中,增加SERIAL列。另外临时表也不支持创建SERIAL列。因为SERIAL不是真正的类型,所以也不可以将表中存在的列类型转化为SERIAL。 表4 浮点类型 名称 描述 存储空间 范围 REAL, FLOAT4 单精度浮点数,不精准。 4字节。 -3.402E+38~+3.402E+38,6位十进制数字精度。 DOUBLE PRECISION, FLOAT8 双精度浮点数,不精准。 8字节。 -1.79E+308~+1.79E+308,15位十进制数字精度。 FLOAT[(p)] 浮点数,不精准。精度p取值范围为[1,53]。 说明: p为精度,表示二进制总位数。 4字节或8字节。 根据精度p不同选择REAL或DOUBLE PRECISION作为内部表示。如不指定精度,内部用DOUBLE PRECISION表示。 BINARY_DOUBLE 是DOUBLE PRECISION的别名,为兼容Oracle数据类型。 8字节。 -1.79E+308~+1.79E+308,15位十进制数字精度。 DEC[(p[,s])] 精度p取值范围为[1,1000],标度s取值范围为[0,p]。 说明: p为总位数,s为小数位位数。 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 在精度和标度指定最大的情况下,小数点前最大131,072位,小数点后最大16,383位。 INTEGER[(p[,s])] 精度p取值范围为[1,1000],标度s取值范围为[0,p]。 在未指定精度和标度的情况下,默认精度p为10,标度s为0。 未指定精度和标度的情况下,该类型映射为INTEGER。指定精度和标度的情况下,该类型映射为NUMERIC。 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 在精度和标度指定最大的情况下,小数点前最大131,072位,小数点后最大16,383位。 未指定精度和标度的情况下,范围是-2,147,483,648 ~ +2,147,483,647。 二进制浮点数据类型REAL、FLOAT4、DOUBLE、DOUBLE PRECISION、FLOAT8、FLOAT[(p)]和BINARY_DOUBLE为不精确的数值类型,其内部存储为近似值,因此存储和检索时可能会显示轻微的差异。当用户在使用二进制浮点数据类型时需要注意以下几点: 精确存储和计算:如果需要精确存储和计算(例如货币金额),请改用精确的数据类型(例如numeric)。 复杂计算:若使用不精确的数据类型执行复杂计算以获得重要数据,需要仔细评估其结果。 浮点数比较:比较两个浮点数是否相等的结果可能与预期存在差异。 下溢错误:如果一个浮点数过于接近零,反而无法准确表示,会导致下溢错误。 关于浮点类型的精度,目前只能保证直接读取时的精度位数。涉及分布式计算时,由于计算执行在各个DN节点上,并且最终汇聚到一个CN节点,因此误差可能会随计算节点数量增加而被放大。 表4中描述的p为精度,表示整数位最低可以接受的总位数;s为小数位位数。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 --创建表。 gaussdb=# CREATE TABLE float_type_t2 ( FT_COL1 INTEGER, FT_COL2 FLOAT4, FT_COL3 FLOAT8, FT_COL4 FLOAT(3), FT_COL5 BINARY_DOUBLE, FT_COL6 DECIMAL(10,4), FT_COL7 INTEGER(6,3) )DISTRIBUTE BY HASH ( ft_col1); --插入数据。 gaussdb=# INSERT INTO float_type_t2 VALUES(10,10.365456,123456.1234,10.3214, 321.321, 123.123654, 123.123654); --查看数据。 gaussdb=# SELECT * FROM float_type_t2 ; ft_col1 | ft_col2 | ft_col3 | ft_col4 | ft_col5 | ft_col6 | ft_col7 ---------+---------+-------------+---------+---------+----------+--------- 10 | 10.3655 | 123456.1234 | 10.3214 | 321.321 | 123.1237 | 123.124 (1 row) --删除表。 gaussdb=# DROP TABLE float_type_t2; 父主题: 数据类型
  • DB_TAB_PARTITIONS DB_TAB_PARTITIONS视图显示当前用户所能访问的一级分区信息(包括二级分区表)。所有用户都可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。分布式暂不支持二级分区,所以该视图中暂不存储二级分区表的一级分区信息。 表1 DB_TAB_PARTITIONS字段 名称 类型 描述 table_owner character varying(64) 表的所有者。 table_name character varying(64) 关系表名称。 partition_name character varying(64) 分区名称。 high_value text 分区的边界值。 对于范围分区和间隔分区,显示各分区的上边界值。 对于列表分区,显示各分区的取值列表。 对于哈希分区,显示各分区的编号。 tablespace_name name 分区表的表空间名称。 schema character varying(64) 名称空间的名称。 composite character varying(3) 指示表是否为二级分区表。 subpartition_count numeric 暂不支持,值为NULL。 high_value_length integer 分区绑定值表达式长度。 partition_position numeric 分区在表中的位置。 pct_free numeric 块中可用空间的最小百分比。 pct_used numeric 暂不支持,值为NULL。 ini_trans numeric 初始事务数,默认值为4,非USTORE分区表时为NULL。 max_trans numeric 最大事务数,默认值为128,非USTORE分区表时为NULL。 initial_extent numeric 暂不支持,值为NULL。 next_extent numeric 暂不支持,值为NULL。 min_extent numeric 暂不支持,值为NULL。 max_extent numeric 暂不支持,值为NULL。 max_size numeric 暂不支持,值为NULL。 pct_increase numeric 暂不支持,值为NULL。 freelists numeric 暂不支持,值为NULL。 freelist_groups numeric 暂不支持,值为NULL。 logging character varying(7) 指示是否记录对表的更改。 compression character varying(8) 指示表分区的实际压缩属性。 compress_for character varying(30) 暂不支持,值为NULL。 num_rows numeric 暂不支持,值为NULL。 blocks numeric 暂不支持,值为NULL。 empty_blocks numeric 暂不支持,值为NULL。 avg_space numeric 暂不支持,值为NULL。 chain_cnt numeric 暂不支持,值为NULL。 avg_row_len numeric 暂不支持,值为NULL。 sample_size numeric 暂不支持,值为NULL。 last_analyzed timestamp with time zone 最近分析此分区的日期。 buffer_pool character varying(7) 用于分区块的缓冲池。 flash_cache character varying(7) 暂不支持,值为NULL。 cell_flash_cache character varying(7) 暂不支持,值为NULL。 global_stats character varying(3) 暂不支持,值为NULL。 user_stats character varying(3) 暂不支持,值为NULL。 is_nested character varying(3) 指示这是否是嵌套表分区。 parent_table_partition character varying(128) 暂不支持,值为NULL。 interval character varying(3) 指示分区是否在间隔分区表的间隔节中。分布式暂不支持间隔分区,该字段值为NO。 segment_created character varying(4) 指示表分区是否创建了段或未创建。 indexing character varying(4) 暂不支持,值为NULL。 read_only character varying(4) 暂不支持,值为NULL。 inmemory character varying(8) 暂不支持,值为NULL。 inmemory_priority character varying(8) 暂不支持,值为NULL。 inmemory_distribute character varying(15) 暂不支持,值为NULL。 inmemory_compression character varying(17) 暂不支持,值为NULL。 inmemory_duplicate character varying(13) 暂不支持,值为NULL。 cellmemory character varying(24) 暂不支持,值为NULL。 inmemory_service character varying(12) 暂不支持,值为NULL。 inmemory_service_name character varying(100) 暂不支持,值为NULL。 memoptimize_read character varying(8) 暂不支持,值为NULL。 memoptimize_write character varying(8) 暂不支持,值为NULL。 父主题: 系统视图
  • 语法 RAISE有以下五种语法格式: 图1 raise_format::= 图2 raise_condition::= 图3 raise_sqlstate::= 图4 raise_option::= 图5 raise::= 参数说明: level选项用于指定错误级别,有DEBUG、LOG、INFO、NOTICE、WARNING以及EXCEPTION(默认值)。EXCEPTION抛出一个正常终止当前事务的异常,其他的仅产生不同异常级别的信息。特殊级别的错误信息是否报告到客户端、写到服务器日志由log_min_messages和client_min_messages这两个GUC参数控制。 format:格式字符串,指定要报告的错误消息文本。格式字符串后可跟表达式,用于向消息文本中插入。在格式字符串中,%由format后面跟着的参数的值替换,%%用于打印出%。例如: --v_job_id 将替换字符串中的 %: RAISE NOTICE 'Calling cs_create_job(%)',v_job_id; option = expression:向错误报告中添加另外的信息。关键字option可以是MESSAGE、DETAIL、HINT以及ERRCODE,并且每一个expression可以是任意的字符串。 MESSAGE,指定错误消息文本,这个选项不能用于在USING前包含一个格式字符串的RAISE语句中。 DETAIL,说明错误的详细信息。 HINT,用于打印出提示信息。 ERRCODE,向报告中指定错误码(SQLSTATE)。可以使用条件名称或者直接用五位字符的SQLSTATE错误码。 condition_name:错误码对应的条件名。 sqlstate:错误码。 如果在RAISE EXCEPTION命令中既没有指定条件名也没有指定SQLSTATE,默认用RAISE EXCEPTION (P0001)。如果没有指定消息文本,默认用条件名或者SQLSTATE作为消息文本。 当由SQLSTATE指定了错误码,则不局限于已定义的错误码,可以选择任意包含五个数字或者大写的ASCII字母的错误码,而不是00000。建议避免使用以三个0结尾的错误码,因为这种错误码是类别码,会被整个种类捕获。 兼容O模式下,SQLCODE等于SQLSTATE。 图5所示的语法不接受任何参数。这种形式仅用于一个BEGIN块中的EXCEPTION语句,它使得错误重新被处理。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全