华为云用户手册

  • date_part date_part函数是在传统的Ingres函数的基础上制作的(该函数等效于SQL标准函数extract): date_part('field', source) 这里的field参数必须是一个字符串,而不是一个名称。有效的field与extract一样,详细信息请参见EXTRACT。 示例: 1 2 3 4 5 openGauss=# SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 16 (1 row) 1 2 3 4 5 openGauss=# SELECT date_part('hour', INTERVAL '4 hours 3 minutes'); date_part ----------- 4 (1 row)
  • TIMESTAMPDIFF TIMESTAMPDIFF(unit , timestamp_expr1, timestamp_expr2) timestampdiff函数是计算两个日期时间之间(timestamp_expr2-timestamp_expr1)的差值,并以unit形式返回结果。timestamp_expr1,timestamp_expr2必须是一个timestamp、timestamptz、date类型的值表达式。unit表示的是两个日期差的单位。 该函数仅在 GaussDB 兼容MY类型时(即dbcompatibility = 'B')有效,其他类型不支持该函数。 year 年份。 1 2 3 4 5 openGauss=# SELECT TIMESTAMPDIFF(YEAR, '2018-01-01', '2020-01-01'); timestamp_diff ---------------- 2 (1 row)
  • EXTRACT EXTRACT(field FROM source) extract函数从日期或时间的数值里抽取子域,比如年、小时等。source必须是一个timestamp、time或interval类型的值表达式(类型为date的表达式转换为timestamp,因此也可以用)。field是一个标识符或者字符串,它指定从源数据中抽取的域。extract函数返回类型为double precision的数值。field的取值范围如下所示。 century 世纪。 第一个世纪从0001-01-01 00:00:00 AD开始。这个定义适用于所有使用阳历的国家。没有0世纪,直接从公元前1世纪到公元1世纪。 示例: 1 2 3 4 5 openGauss=# SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13'); date_part ----------- 20 (1 row) day 如果source为timestamp,表示月份里的日期(1-31)。 1 2 3 4 5 openGauss=# SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 16 (1 row) 如果source为interval,表示天数。 1 2 3 4 5 openGauss=# SELECT EXTRACT(DAY FROM INTERVAL '40 days 1 minute'); date_part ----------- 40 (1 row) decade 年份除以10。 1 2 3 4 5 openGauss=# SELECT EXTRACT(DECADE FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 200 (1 row) dow 每周的星期几,星期天(0)到星期六(6)。 1 2 3 4 5 openGauss=# SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 5 (1 row) doy 一年的第几天(1~365/366)。 1 2 3 4 5 openGauss=# SELECT EXTRACT(DOY FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 47 (1 row) epoch 如果source为timestamp with time zone,表示自1970-01-01 00:00:00-00 UTC以来的秒数(结果可能是负数); 如果source为date和timestamp,表示自1970-01-01 00:00:00-00当地时间以来的秒数; 如果source为interval,表示时间间隔的总秒数。 1 2 3 4 5 openGauss=# SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40.12-08'); date_part -------------- 982384720.12 (1 row) 1 2 3 4 5 openGauss=# SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours'); date_part ----------- 442800 (1 row) 将epoch值转换为时间戳的方法。 1 2 3 4 5 openGauss=# SELECT TIMESTAMP WITH TIME ZONE 'epoch' + 982384720.12 * INTERVAL '1 second' AS RESULT; result --------------------------- 2001-02-17 12:38:40.12+08 (1 row) hour 小时域(0-23)。 1 2 3 4 5 openGauss=# SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 20 (1 row) isodow 一周的第几天(1-7)。 星期一为1,星期天为7。 除了星期天外,都与dow相同。 1 2 3 4 5 openGauss=# SELECT EXTRACT(ISODOW FROM TIMESTAMP '2001-02-18 20:38:40'); date_part ----------- 7 (1 row) isoyear 日期中的ISO 8601标准年(不适用于间隔)。 每个带有星期一开始的周中包含1月4日的ISO年,所以在年初的1月或12月下旬的ISO年可能会不同于阳历的年。详细信息请参见后续的week描述。 1 2 3 4 5 openGauss=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-01'); date_part ----------- 2005 (1 row) 1 2 3 4 5 openGauss=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-02'); date_part ----------- 2006 (1 row) microseconds 秒域(包括小数部分)乘以1,000,000。 1 2 3 4 5 openGauss=# SELECT EXTRACT(MICROSECONDS FROM TIME '17:12:28.5'); date_part ----------- 28500000 (1 row) millennium 千年。 20世纪(19xx年)里面的年份在第二个千年里。第三个千年从2001年1月1日零时开始。 1 2 3 4 5 openGauss=# SELECT EXTRACT(MILLENNIUM FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 3 (1 row) milliseconds 秒域(包括小数部分)乘以1000。请注意它包括完整的秒。 1 2 3 4 5 openGauss=# SELECT EXTRACT(MILLISECONDS FROM TIME '17:12:28.5'); date_part ----------- 28500 (1 row) minute 分钟域(0-59)。 1 2 3 4 5 openGauss=# SELECT EXTRACT(MINUTE FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 38 (1 row) month 如果source为timestamp,表示一年里的月份数(1-12)。 1 2 3 4 5 openGauss=# SELECT EXTRACT(MONTH FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 2 (1 row) 如果source为interval,表示月的数目,然后对12取模(0-11)。 1 2 3 4 5 openGauss=# SELECT EXTRACT(MONTH FROM INTERVAL '2 years 13 months'); date_part ----------- 1 (1 row) quarter 该天所在的该年的季度(1-4)。 1 2 3 4 5 openGauss=# SELECT EXTRACT(QUARTER FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 1 (1 row) second 秒域,包括小数部分(0-59)。 1 2 3 4 5 openGauss=# SELECT EXTRACT(SECOND FROM TIME '17:12:28.5'); date_part ----------- 28.5 (1 row) timezone 与UTC的时区偏移量,单位为秒。正数对应UTC东边的时区,负数对应UTC西边的时区。 timezone_hour 时区偏移量的小时部分。 timezone_minute 时区偏移量的分钟部分。 week 该天在所在的年份里是第几周。ISO 8601定义一年的第一周包含该年的一月四日(ISO-8601 的周从星期一开始)。换句话说,一年的第一个星期四在第一周。 在ISO定义里,一月的头几天可能是前一年的第52或者第53周,十二月的后几天可能是下一年第一周。比如,2005-01-01是2004年的第53周,而2006-01-01是2005年的第52周,2012-12-31是2013年的第一周。建议isoyear字段和week一起使用以得到一致的结果。 1 2 3 4 5 openGauss=# SELECT EXTRACT(WEEK FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 7 (1 row) year 年份域。 1 2 3 4 5 openGauss=# SELECT EXTRACT(YEAR FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 2001 (1 row)
  • 时间/日期函数 age(timestamp, timestamp) 描述:将两个参数相减,并以年、月、日作为返回值。若相减值为负,则函数返回亦为负,入参可以都带timezone或都不带timezone。 返回值类型:interval 示例: 1 2 3 4 5 openGauss=# SELECT age(timestamp '2001-04-10', timestamp '1957-06-13'); age ------------------------- 43 years 9 mons 27 days (1 row) age(timestamp) 描述:当前时间和参数相减,入参可以带或者不带timezone。 返回值类型:interval 示例: 1 2 3 4 5 openGauss=# SELECT age(timestamp '1957-06-13'); age ------------------------- 60 years 2 mons 18 days (1 row) clock_timestamp() 描述:实时时钟的当前时间戳。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 openGauss=# SELECT clock_timestamp(); clock_timestamp ------------------------------- 2017-09-01 16:57:36.636205+08 (1 row) current_date 描述:当前日期。 返回值类型:date 示例: 1 2 3 4 5 openGauss=# SELECT current_date; date ------------ 2017-09-01 (1 row) current_time 描述:当前时间。 返回值类型:time with time zone 示例: 1 2 3 4 5 openGauss=# SELECT current_time; timetz -------------------- 16:58:07.086215+08 (1 row) current_timestamp 描述:当前日期及时间。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 openGauss=# SELECT current_timestamp; pg_systimestamp ------------------------------ 2017-09-01 16:58:19.22173+08 (1 row) date_part(text, timestamp) 描述:获取日期/时间值中子域的值,例如年或者小时的值。等效于extract(field from timestamp)。 timestamp类型:abstime、date、interval、reltime、time with time zone、time without time zone、timestamp with time zone、timestamp without time zone。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT date_part('hour', timestamp '2001-02-16 20:38:40'); date_part ----------- 20 (1 row) date_part(text, interval) 描述:获取日期/时间值中子域的值。获取月份值时,如果月份值大于12,则取与12的模。等效于extract(field from timestamp)。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT date_part('month', interval '2 years 3 months'); date_part ----------- 3 (1 row) date_trunc(text, timestamp) 描述:截取到参数text指定的精度。 返回值类型:interval、timestamp with time zone、timestamp without time zone 示例: 1 2 3 4 5 openGauss=# SELECT date_trunc('hour', timestamp '2001-02-16 20:38:40'); date_trunc --------------------- 2001-02-16 20:00:00 (1 row) trunc(timestamp) 描述:默认按天截取。 示例: 1 2 3 4 openGauss=# SELECT trunc(timestamp '2001-02-16 20:38:40'); trunc --------------------- 2001-02-16 00:00:00 (1 row) trunc(arg1, arg2) 描述:截取到arg2指定的精度。 arg1类型:interval、timestamp with time zone、timestamp without time zone arg2类型:text 返回值类型:interval、timestamp with time zone、timestamp without time zone 示例: 1 2 3 4 openGauss=# SELECT trunc(timestamp '2001-02-16 20:38:40', 'hour'); trunc --------------------- 2001-02-16 20:00:00 (1 row) daterange(arg1, arg2) 描述:获取时间边界信息。arg1和arg2的类型为date。 返回值类型:daterange 示例: 1 2 3 4 5 openGauss=# select daterange('2000-05-06','2000-08-08'); daterange ------------------------- [2000-05-06,2000-08-08) (1 row) daterange(arg1, arg2, text) 描述:获取时间边界信息。arg1和arg2的类型为date,text类型为text。 返回值类型:daterange 示例: 1 2 3 4 5 openGauss=# select daterange('2000-05-06','2000-08-08','[]'); daterange ------------------------- [2000-05-06,2000-08-09) (1 row) extract(field from timestamp) 描述:获取小时的值。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT extract(hour from timestamp '2001-02-16 20:38:40'); date_part ----------- 20 (1 row) extract(field from interval) 描述:获取月份的值。如果大于12,则取与12的模。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT extract(month from interval '2 years 3 months'); date_part ----------- 3 (1 row) isfinite(date) 描述:测试是否为有效日期。 返回值类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT isfinite(date '2001-02-16'); isfinite ---------- t (1 row) isfinite(timestamp) 描述:测试判断是否为有效时间。 返回值类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT isfinite(timestamp '2001-02-16 21:28:30'); isfinite ---------- t (1 row) isfinite(interval) 描述:测试是否为有效区间。 返回值类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT isfinite(interval '4 hours'); isfinite ---------- t (1 row) justify_days(interval) 描述:将时间间隔以月(30天为一月)为单位。 返回值类型:interval 示例: 1 2 3 4 5 openGauss=# SELECT justify_days(interval '35 days'); justify_days -------------- 1 mon 5 days (1 row) justify_hours(interval) 描述:将时间间隔以天(24小时为一天)为单位。 返回值类型:interval 示例: 1 2 3 4 5 openGauss=# SELECT JUSTIFY_HOURS(INTERVAL '27 HOURS'); justify_hours ---------------- 1 day 03:00:00 (1 row) justify_interval(interval) 描述:结合justify_days和justify_hours,调整interval。 返回值类型:interval 示例: 1 2 3 4 5 openGauss=# SELECT JUSTIFY_INTERVAL(INTERVAL '1 MON -1 HOUR'); justify_interval ------------------ 29 days 23:00:00 (1 row) localtime 描述:当前时间。 返回值类型:time 示例: 1 2 3 4 5 openGauss=# SELECT localtime AS RESULT; result ---------------- 16:05:55.664681 (1 row) localtimestamp 描述:当前日期及时间。 返回值类型:timestamp 示例: 1 2 3 4 5 openGauss=# SELECT localtimestamp; timestamp ---------------------------- 2017-09-01 17:03:30.781902 (1 row) now() 描述:当前日期及时间。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 openGauss=# SELECT now(); now ------------------------------- 2017-09-01 17:03:42.549426+08 (1 row) timenow 描述:当前日期及时间。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 openGauss=# select timenow(); timenow ------------------------ 2020-06-23 20:36:56+08 (1 row) numtodsinterval(num, interval_unit) 描述:将数字转换为interval类型。num为numeric类型数字,interval_unit为固定格式字符串('DAY' | 'HOUR' | 'MINUTE' | 'SECOND')。 可以通过设置参数IntervalStyle为a,兼容该函数interval输出格式。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 openGauss=# SELECT numtodsinterval(100, 'HOUR'); numtodsinterval ----------------- 100:00:00 (1 row) openGauss=# SET intervalstyle = a; SET openGauss=# SELECT numtodsinterval(100, 'HOUR'); numtodsinterval ------------------------------- +000000004 04:00:00.000000000 (1 row) pg_sleep(seconds) 描述:服务器线程延迟时间,单位为秒。 返回值类型:void 示例: 1 2 3 4 5 openGauss=# SELECT pg_sleep(10); pg_sleep ---------- (1 row) statement_timestamp() 描述:当前日期及时间。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 openGauss=# SELECT statement_timestamp(); statement_timestamp ------------------------------- 2017-09-01 17:04:39.119267+08 (1 row) sysdate 描述:当前日期及时间。 返回值类型:timestamp 示例: 1 2 3 4 5 openGauss=# SELECT sysdate; sysdate --------------------- 2017-09-01 17:04:49 (1 row) timeofday() 描述:当前日期及时间(像clock_timestamp,但是返回时为text)。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT timeofday(); timeofday ------------------------------------- Fri Sep 01 17:05:01.167506 2017 CS T (1 row) transaction_timestamp() 描述:当前日期及时间,与current_timestamp等效。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 openGauss=# SELECT transaction_timestamp(); transaction_timestamp ------------------------------- 2017-09-01 17:05:13.534454+08 (1 row) add_months(d,n) 描述:用于计算时间点d再加上n个月的时间。 d:timestamp类型的值,以及可以隐式转换为timestamp类型的值。 n:INTEGER类型的值,以及可以隐式转换为INTEGER类型的值。 返回值类型:timestamp 示例: 1 2 3 4 5 openGauss=# SELECT add_months(to_date('2017-5-29', 'yyyy-mm-dd'), 11) FROM sys_dummy; add_months --------------------- 2018-04-29 00:00:00 (1 row) last_day(d) 描述:用于计算时间点d当月最后一天的时间。 返回值类型:timestamp 示例: 1 2 3 4 5 openGauss=# select last_day(to_date('2017-01-01', 'YYYY-MM-DD')) AS cal_result; cal_result --------------------- 2017-01-31 00:00:00 (1 row)
  • 货币类型 货币类型存储带有固定小数精度的货币金额。 表1中显示的范围假设有两位小数。可以以任意格式输入,包括整型、浮点型或者典型的货币格式(如“$1,000.00”)。根据区域字符集,输出一般是最后一种形式。 表1 货币类型 名称 存储容量 描述 范围 money 8 字节 货币金额 -92233720368547758.08 到 +92233720368547758.07 numeric,int和bigint类型的值可以转化为money类型。如果从real和double precision类型转换到money类型,可以先转化为numeric类型,再转化为money类型,例如: 1 openGauss=# SELECT '12.34'::float8::numeric::money; 这种用法是不推荐使用的。浮点数不应该用来处理货币类型,因为小数点的位数可能会导致错误。 money类型的值可以转换为numeric类型而不丢失精度。转换为其他类型可能丢失精度,并且必须通过以下两步来完成: 1 openGauss=# SELECT '52093.89'::money::numeric::float8; 当一个money类型的值除以另一个money类型的值时,结果是double precision(也就是,一个纯数字,而不是money类型);在运算过程中货币单位相互抵消。 父主题: 数据类型
  • 对表执行VACUUM 如果导入过程中,进行了大量的更新或删除行时,应运行VACUUM FULL命令,然后运行ANALYZE命令。大量的更新和删除操作,会产生大量的磁盘页面碎片,从而逐渐降低查询的效率。VACUUM FULL可以将磁盘页面碎片恢复并交还操作系统。 对表执行VACUUM FULL。 以表product_info为例,VACUUM FULL命令如下: 1 openGauss=# VACUUM FULL product_info VACUUM 父主题: 导入数据
  • 语法格式 1 CREATE MASKING POLICY policy_name masking_clause[, ...]* policy_filter [ENABLE | DISABLE]; masking_clause: 1 masking_function ON LABEL(label_name[, ...]*) masking_function: maskall不是预置函数,硬编码在代码中,不支持\df展示。 预置时脱敏方式如下: maskall | randommasking | creditcardmasking | basicemailmasking | fullemailmasking | shufflemasking | alldigitsmasking | regexpmasking
  • 参数说明 policy_name 审计策略名称,需要唯一,不可重复。 取值范围:字符串,要符合标识符的命名规范。 label_name 资源标签名称。 masking_clause 指出使用何种脱敏函数对被label_name标签标记的数据库资源进行脱敏,支持用schema.function的方式指定脱敏函数。 policy_filter 指出该脱敏策略对何种身份的用户生效,若为空表示对所有用户生效。 FILTER_TYPE 描述策略过滤的条件类型,包括IP | APP | ROLES。 filter_value 指具体过滤信息内容,例如具体的IP,具体的APP名称,具体的用户名。 ENABLE|DISABLE 可以打开或关闭脱敏策略。若不指定ENABLE|DISABLE,语句默认为ENABLE。
  • 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 --创建dev_mask和bob_mask用户。 openGauss=# CREATE USER dev_mask PASSWORD 'dev@1234'; openGauss=# CREATE USER bob_mask PASSWORD 'bob@1234'; --创建一个表tb_for_masking openGauss=# CREATE TABLE tb_for_masking(col1 text, col2 text, col3 text); --创建资源标签标记敏感列col1 openGauss=# CREATE RESOURCE LABEL mask_lb1 ADD COLUMN(tb_for_masking.col1); --创建资源标签标记敏感列col2 openGauss=# CREATE RESOURCE LABEL mask_lb2 ADD COLUMN(tb_for_masking.col2); --对访问敏感列col1的操作创建脱敏策略 openGauss=# CREATE MASKING POLICY maskpol1 maskall ON LABEL(mask_lb1); --创建仅对用户dev_mask和bob_mask,客户端工具为psql和gsql,IP地址为'10.20.30.40', '127.0.0.0/24'场景下生效的脱敏策略。 openGauss=# CREATE MASKING POLICY maskpol2 randommasking ON LABEL(mask_lb2) FILTER ON ROLES(dev_mask, bob_mask), APP(psql, gsql), IP('10.20.30.40', '127.0.0.0/24');
  • 返回值 SQL_SUC CES S:表示调用正确。 SQL_SUCCESS_WITH_INFO:表示会有一些警告信息。 SQL_NEED_DATA:在执行SQL语句前没有提供足够的参数。 SQL_ERROR:表示比较严重的错误,如:内存分配失败、建立连接失败等。 SQL_INVALID_HANDLE:表示调用无效句柄。其他API的返回值同理。 SQL_STILL_EXECUTING:表示语句正在执行。 SQL_NO_DATA:表示SQL语句不返回结果集。
  • 安全策略管理员 安全策略管理员是指具有POLADMIN属性的帐户,具有创建资源标签,脱敏策略和统一审计策略的权限。 要创建新的安全策略管理员,请以系统管理员用户身份连接数据库,并使用带POLADMIN选项的CREATE USER语句或ALTER USER语句进行设置。 1 openGauss=# CREATE USER poladmin WITH POLADMIN password "xxxxxxxxx"; 或者 1 openGauss=# ALTER USER joe POLADMIN; ALTER USER时,要求用户已存在。
  • 监控管理员 监控管理员是指具有MONADMIN属性的帐户,具有查看dbe_perf模式下视图和函数的权限,亦可以对dbe_perf模式的对象权限进行授予或收回。 要创建新的监控管理员,请以系统管理员身份连接数据库,并使用带MONADMIN选项的CREATE USER语句或ALTER USER语句进行设置。 1 openGauss=# CREATE USER monadmin WITH MONADMIN password "xxxxxxxxx"; 或者 1 openGauss=# ALTER USER joe MONADMIN; ALTER USER时,要求用户已存在。
  • 运维管理员 运维管理员是指具有OPRADMIN属性的帐户,具有使用Roach工具执行备份恢复的权限。 要创建新的运维管理员,请以初始用户身份连接数据库,并使用带OPRADMIN选项的CREATE USER语句或ALTER USER语句进行设置。 1 openGauss=# CREATE USER opradmin WITH OPRADMIN password "xxxxxxxxx"; 或者 1 openGauss=# ALTER USER joe OPRADMIN; ALTER USER时,要求用户已存在。
  • 系统管理员 系统管理员是指具有SYSADMIN属性的帐户,默认安装情况下具有与对象所有者相同的权限,但不包括dbe_perf模式的对象权限和使用Roach工具执行备份恢复的权限。 要创建新的系统管理员,请以初始用户或者系统管理员用户身份连接数据库,并使用带SYSADMIN选项的CREATE USER语句或ALTER USER语句进行设置。 1 openGauss=# CREATE USER sysadmin WITH SYSADMIN password "xxxxxxxxx"; 或者 1 openGauss=# ALTER USER joe SYSADMIN; ALTER USER时,要求用户已存在。
  • 初始用户 数据库安装过程中自动生成的帐户称为初始用户。初始用户也是系统管理员、监控管理员、运维管理员和安全策略管理员,拥有系统的最高权限,能够执行所有的操作。如果安装时不指定初始用户名称则该帐户与进行数据库安装的操作系统用户同名。如果在安装时不指定初始用户的密码,安装完成后密码为空,在执行其他操作前需要通过gsql客户端修改初始用户的密码。如果初始用户密码为空,则除修改密码外无法执行其他SQL操作以及升级、扩容、节点替换等操作。 初始用户会绕过所有权限检查。建议仅将此初始用户作为DBA管理用途,而非业务应用。
  • 日志诊断场景 ODBC日志分为unixODBC驱动管理器日志和psqlODBC驱动端日志。前者可以用于追溯应用程序API的执行是否成功,后者是底层实现过程中的一些DFX日志,用来帮助定位问题。 unixODBC日志需要在odbcinst.ini文件中配置: 1 2 3 4 5 6 7 [ODBC] Trace=Yes TraceFile=/path/to/odbctrace.log [GaussMPP] Driver64=/usr/local/lib/psqlodbcw.so setup=/usr/local/lib/psqlodbcw.so psqlODBC日志只需要在odbc.ini加上: [gaussdb] Driver=GaussMPP Servername=10.10.0.13(数据库Server IP) ... Debug=1(打开驱动端debug日志) unixODBC日志将会生成在TraceFile配置的路径下,psqlODBC会在系统/tmp/下生成mylog_xxx.log。
  • 背景信息 与审计日志相关的配置参数及其含义请参见表1。 表1 审计日志相关配置参数 配置项 含义 默认值 audit_directory 审计文件的存储目录。 $GAUSS LOG /pg_audit audit_resource_policy 审计日志的保存策略。 on(表示使用空间配置策略) audit_space_limit 审计文件占用的磁盘空间总量。 1GB audit_file_remain_time 审计日志文件的最小保存时间。 90 audit_file_remain_threshold 审计目录下审计文件的最大数量。 1048576 审计日志删除命令为数据库提供的sql函数pg_delete_audit,其原型为: pg_delete_audit(timestamp startime,timestamp endtime) 其中参数startime和endtime分别表示审计记录的开始时间和结束时间。 目前常用的记录审计内容的方式有两种:记录到数据库的表中、记录到OS文件中。这两种方式的优缺点比较如表2所示。 表2 审计日志保存方式比较 方式 优点 缺点 记录到表中 不需要用户维护审计日志。 由于表是数据库的对象,如果一个数据库用户具有一定的权限,就能够访问到审计表。如果该用户非法操作审计表,审计记录的准确性难以得到保证。 记录到OS文件中 比较安全,即使一个帐户可以访问数据库,但不一定有访问OS这个文件的权限。 需要用户维护审计日志。 从数据库安全角度出发,GaussDB采用记录到OS文件的方式来保存审计结果,保证了审计结果的可靠性。
  • 操作步骤 参考连接数据库,连接数据库。 选择日志维护方式进行维护。 设置自动删除审计日志 审计文件占用的磁盘空间或者审计文件的个数超过指定的最大值时,系统将删除最早的审计文件,并记录审计文件删除信息到审计日志中。 审计文件占用的磁盘空间大小默认值为1024MB,用户可以根据磁盘空间大小重新设置参数。 配置审计 文件占用磁盘空间的大小(audit_space_limit)。 配置审计文件个数的最大值(audit_file_remain_threshold)。 手动备份审计文件 当审计文件占用的磁盘空间或者审计文件的个数超过配置文件指定的值时,系统将会自动删除较早的审计文件,因此建议用户周期性地对比较重要的审计日志进行保存。 使用show命令获得审计文件所在目录(audit_directory)。 1 openGauss=# SHOW audit_directory; 将审计目录整个拷贝出来进行保存。 手动删除审计日志 当不再需要某时段的审计记录时,可以使用审计接口命令pg_delete_audit进行手动删除。 以删除2012/9/20到2012/9/21之间的审计记录为例: 1 openGauss=# SELECT pg_delete_audit('2012-09-20 00:00:00','2012-09-21 23:59:59');
  • 审计 云审计 服务(Cloud Trace Service, CTS ),是华为 云安全 解决方案中专业的日志审计服务,提供对各种云资源操作记录的收集、存储和查询功能,可用于支撑安全分析、合规审计、资源跟踪和问题定位等常见应用场景。 CTS的详细介绍和开通配置方法,请参见CTS快速入门。 通过云审计服务,您可以记录与GaussDB实例相关的操作事件,便于日后的查询、审计和回溯。具体内容请参见支持审计的关键操作列表。
  • 日志 出于分析或审计等目的,用户可以开启实例的日志记录功能。当用户开启日志记录功能后,GaussDB可以通过管理控制台下载日志。 错误日志 GaussDB支持下载错误日志。错误日志记录了数据库运行时的日志,通过错误日志有助于分析系统中存在的问题。错误日志的详细介绍,请参见错误日志。 慢日志 GaussDB支持下载慢日志。慢日志可以帮助您定位SQL语句执行慢的问题,从而进行优化。慢日志的详细介绍,请参见慢日志。
  • 数据库实例系统账号 您在创建 GaussDB数据库 实例时,系统会自动为实例创建如下系统账户(用户不可使用),用于给数据库实例提供完善的后台运维管理服务。 如果试图删掉、重命名、修改这些系统账户的密码和权限,会导致出错,请谨慎操作。 表1 系统账号 账户名称 默认密码 账户登录权限 账户说明 密码有效期 rdsAdmin 系统随机分配 数据库账号,禁止登录 GaussDB管理账户。 永久 rdsBackup 系统随机分配 数据库账号,禁止登录 用于实例数据库做备份。 永久 rdsRepl 系统随机分配 数据库账号,禁止登录 主备同步账户。 永久 root 用户购买实例时手动设置 SSH远程登录 系统管理员账户 永久 rdsMetric 系统随机分配 数据库账号,禁止登录 获取GaussDB的性能指标,用于上报到Cloud Eye供租户查看GaussDB运行情况的账户。 永久 父主题: 实例说明
  • GaussDB与其他服务的关系 GaussDB与其他服务的关系如表1。 表1 与其他服务的关系 相关服务 交互功能 弹性云服务器(ECS) GaussDB服务通过弹性云服务器(Elastic Cloud Server,简称ECS)远程连接GaussDB可以有效的降低应用响应时间、节省公网流量费用。 虚拟私有云(VPC) 对您的GaussDB实例进行网络隔离和访问控制。 对象存储服务 (OBS) 存储GaussDB实例的自动和手动备份数据。 云监控服务 (Cloud Eye) 云监控 服务是一个开放性的监控平台,帮助用户实时监测GaussDB资源的动态。云监控服务提供多种告警方式以保证及时预警,为您的服务正常运行保驾护航。 云审计服务(CTS) 云审计服务(Cloud Trace Service,简称CTS),为用户提供云服务资源的操作记录,供您查询、审计和回溯使用。 企业管理服务(EPS) 企业管理服务(Enterprise Project Management Service,简称EPS)提供统一的云资源按企业项目管理,以及企业项目内的资源管理、成员管理。 标签管理服务(TMS) 标签管理服务(Tag Management Service,简称TMS)是一种快速便捷将标签集中管理的可视化服务,提供跨区域、跨服务的集中标签管理和资源分类功能。 数据管理服务(DAS) 使用数据管理服务(Data Admin Service,简称DAS),通过专业优质的可视化操作界面,提高数据管理工作的效率和安全。
  • GaussDB权限 默认情况下,管理员创建的 IAM 用户没有任何权限,需要将其加入用户组,并给用户组授予策略或角色,才能使得用户组中的用户获得对应的权限,这一过程称为授权。授权后,用户就可以基于被授予的权限对云服务进行操作。 GaussDB部署时通过物理区域划分,为项目级服务。授权时,“作用范围”需要选择“区域级项目”,然后在指定区域(如华北-北京1)对应的项目(cn-north-1)中设置相关权限,并且该权限仅对此项目生效;如果在“所有项目”中设置权限,则该权限在所有区域项目中都生效。访问GaussDB时,需要先切换至授权区域。 根据授权精细程度分为角色和策略。 角色:IAM最初提供的一种根据用户的工作职能定义权限的粗粒度授权机制。该机制以服务为粒度,提供有限的服务相关角色用于授权。由于华为云各服务之间存在业务依赖关系,因此给用户授予角色时,可能需要一并授予依赖的其他角色,才能正确完成业务。角色并不能满足用户对精细化授权的要求,无法完全达到企业对权限最小化的安全管控要求。 策略:IAM最新提供的一种细粒度授权的能力,可以精确到具体服务的操作、资源以及请求条件等。基于策略的授权是一种更加灵活的授权方式,能够满足企业对权限最小化的安全管控要求。例如:针对GaussDB服务,管理员能够控制IAM用户仅能对某一类数据库资源进行指定的管理操作。多数细粒度策略以API接口为粒度进行权限拆分,GaussDB支持的API授权项请参见策略及授权项说明 。 如表1所示,包括了GaussDB的所有系统权限。 表1 GaussDB系统权限 策略名称 描述 类别 GaussDB FullAccess 云数据库GaussDB服务的所有执行权限。 系统策略 GaussDB ReadOnlyAccess 云数据库GaussDB服务的只读访问权限。 系统策略 表2列出了GaussDB常用操作与系统权限的授权关系,您可以参照该表选择合适的系统权限。 表2 常用操作与系统权限的关系 操作 GaussDB FullAccess GaussDB ReadOnlyAccess 创建GaussDB实例 √ x 删除GaussDB实例 √ x 查询GaussDB实例列表 √ √ 表3 常用操作与对应授权项 操作名称 授权项 备注 创建数据库实例 gaussdb:instance:create gaussdb:param:list 界面选择VPC、子网、安全组需要配置: vpc:vpcs:list vpc:vpcs:get vpc:subnets:get vpc:securityGroups:get 创建包周期实例需要配置 bss:order:update bss:order:view bss:balance:view 创建加密实例需要在项目上配置: kms:cmk:get kms:cmk:list 操作失败上报事件监控需要配置: "ces:alarmsOnOff:put" "ces:alarms:create" 规格变更 gaussdb:instance:modifySpec 操作失败上报事件监控需要配置: "ces:alarmsOnOff:put" "ces:alarms:create" 扩容节点 gaussdb:instance:modifySpec 操作失败上报事件监控需要配置: "ces:alarmsOnOff:put" "ces:alarms:create" 磁盘扩容 gaussdb:instance:modifySpec 操作失败上报事件监控需要配置: "ces:alarmsOnOff:put" "ces:alarms:create" 重启数据库实例 gaussdb:instance:restart 操作失败上报事件监控需要配置: "ces:alarmsOnOff:put" "ces:alarms:create" 删除数据库实例 gaussdb:instance:delete 退订包周期实例需要配置: "bss:unsubscribe:update" 操作失败上报事件监控需要配置: "ces:alarmsOnOff:put" "ces:alarms:create" 查询数据库实例列表 gaussdb:instance:list 无 实例详情 gaussdb:instance:list 实例详情界面展示VPC、子网、安全组,需要对应配置vpc:*:get和vpc:*:list。显示磁盘已使用大小,需要配置ces:*:list。 修改数据库实例密码 gaussdb:instance:modify 操作失败上报事件监控需要配置: "ces:alarmsOnOff:put" "ces:alarms:create" 修改实例名称 gaussdb:instance:modify 无 绑定/解绑公网IP gaussdb:instance:modify 界面列出公网IP需要配置: vpc:publicIps:get vpc:publicIps:list 操作失败上报事件监控需要配置: "ces:alarmsOnOff:put" "ces:alarms:create" 创建参数模板 gaussdb:param:create gaussdb:param:list 无 修改参数模板 gaussdb:param:modify 无 获取参数模板列表 gaussdb:param:list 无 应用参数模板 gaussdb:param:apply 操作失败上报事件监控需要配置: "ces:alarmsOnOff:put" "ces:alarms:create 删除参数模板 gaussdb:param:delete 无 创建手动备份 gaussdb:backup:create 操作失败上报事件监控需要配置: "ces:alarmsOnOff:put" "ces:alarms:create" 获取备份列表 gaussdb:backup:list 无 修改备份策略 gaussdb:instance:modifyBackupPolicy 无 删除手动备份 gaussdb:backup:delete 操作失败上报事件监控需要配置: "ces:alarmsOnOff:put" "ces:alarms:create" 恢复到新实例 gaussdb:instance:create 界面选择VPC、子网、安全组需要配置: vpc:vpcs:list vpc:vpcs:get vpc:subnets:get vpc:securityGroups:get 操作失败上报事件监控需要配置: "ces:alarmsOnOff:put" "ces:alarms:create 查询项目标签 gaussdb:tag:list 无 批量添加删除项目标签 gaussdb:instance:dealTag 无 修改配额 gaussdb:quota:modify 无 查询预定义标签 gaussdb:instance:list 查询预定义标签需要配置: tms:resourceTags:list 查询配置日志组 - 查询配置日志组需要配置: lts:groups:get 查询配置日志流 - 查询配置日志流需要配置: lts:topics:get 存储空间自动扩容 gaussdb:instance:autoEnlargePolicy 如果选择自动扩容,IAM主账号(原华为账号)不需要添加授权项,IAM子账号需要添加如下IAM授权项: iam:agencies:listAgencies iam:agencies:createAgency iam:permissions:listRolesForAgencyOnProject iam:permissions:grantRoleToGroupOnProject iam:roles:listRoles dbmind操作 gaussdb:instance:sqlCollect gaussdb:instance:sqlDiagnosis gaussdb:instance:riskAnalysis gaussdb:instance:indexAdvise gaussdb:instance:sqlCollect SQL采集 gaussdb:instance:sqlDiagnosis 慢SQL诊断 gaussdb:instance:riskAnalysis 风险预测 gaussdb:instance:indexAdvise 索引推荐
  • 数据保护技术 GaussDB通过多种数据保护手段和特性,保障存储在GaussDB中的数据安全可靠。 表1 多种数据保护手段 数据保护手段 简要说明 详细介绍 传输加密(HTTPS) 支持HTTP和HTTPS两种传输协议,为保证数据传输的安全性,推荐您使用更加安全的HTTPS协议。 构造请求 数据备份 支持设置数据库的备份和恢复,来保障数据的可靠性。 数据备份 敏感操作保护 控制台支持敏感操作保护,开启后执行删实例等敏感操作时,系统会进行身份验证,进一步保证GaussDB配置和数据的安全性。 敏感操作保护介绍 SSL 数据加密 可以使用SSL来加密数据库GaussDB和客户端的连接。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。 SSL连接数据库 删除保护 GaussDB支持将删除的实例,加入回收站管理。通过数据库回收站中重建实例功能,可以恢复1~7天内删除的实例。 回收站 父主题: 安全
  • 产品优势 高安全 GaussDB拥有TOP级的商业数据库安全特性,如下所示,能够满足政企和金融级客户的核心安全诉求。 数据动态脱敏,行级访问控制,密态计算。 健全的工具与服务化能力 GaussDB已经拥有华为云,商用服务化部署能力,同时支持DAS、DRS等生态工具。有效保障用户开发、运维、优化、监控、迁移等日常工作需要。 全栈自研 GaussDB基于鲲鹏生态,是当前国内唯一能够做到全栈自主可控的国产品牌。同时GaussDB能够基于硬件优势在底层不断进行优化,提升产品综合性能。 开源生态 GaussDB已经支持开源社区,并提供主备版版本下载。
  • 续费 目前GaussDB提供“按需计费”和“包年/包月”计费方式的购买方式,您可以根据业务需要定制相应计算能力和存储空间的数据库实例。 “按需计费”方式,即按实际使用时长计费,以自然小时为单位整点计费,不足一小时按实际使用时长计费,只要您账户上有足够余额,就可以一直使用服务。当账户余额不足时,就会导致欠费,因此在欠费前请及时充值。 “包年/包月”计费方式,您在购买时一次性付费,使用过程中不会再另外扣费,只要您的账户上有足够余额,则不会影响您的使用。
  • 计费项 GaussDB对您选择的数据库实例、数据库存储和备份存储(可选)收费。 表1 GaussDB计费项说明 计费项 计费说明 数据库实例 对所选的实例规格进行计费,提供按需计费和包周期计费方式。 数据库存储 对数据库存储空间进行计费,提供按需计费和包周期计费方式。 备份存储(可选) GaussDB提供了部分免费存储空间,用于存放您的备份数据,其总容量约为您购买存储容量的100%。备份存储用量超过数据库存储空间的100%,开始按照阶梯计费。 公网流量 GaussDB实例支持公网访问,公网访问会产生带宽流量费;GaussDB数据库实例在云内部网络产生的流量不计费。 GaussDB管理费用详情,请参见产品价格详情。您可以通过GaussDB提供的价格计算器,选择您需要的实例规格,来快速计算出购买实例的参考价格。
  • 到期与欠费 服务到期 “按需计费”实例,没有到期的概念。 “包年/包月”实例到期后无法在管理控制台进行该实例的操作,相关接口也无法调用,自动化监控或告警等运维也会停止。如果在保留期结束时您没有续费,实例将终止服务,系统中的数据也将被永久删除。 若您购买的实例已到期,请参见费用中心用户指南中资源停止服务或逾期释放说明章节进行处理。 欠费 “包年/包月”实例,没有欠费的概念。 “按需计费”实例是按每小时扣费,当余额不足,无法对上一个小时的费用进行扣费,就会导致实例欠费。您续费后解冻实例,可继续正常使用,请注意在保留期进行的续费,是以原到期时间作为生效时间,您应当支付从进入保留期开始到续费时的服务费用。 若您购买的实例已欠费,请参见费用中心用户指南中欠费还款章节进行处理。
  • 数据库实例类型 GaussDB的实例类型分为主备版和分布式版。 表1 实例类型 实例类型 支持的部署形态 是否支持实例扩容 适用场景 包含的组件 业务处理流程 分布式版 独立部署:将数据库组件部署在不同节点上。适用于可靠性、稳定性要求较高,实例规模较大的场景。 是 数据量较大,对数据容量和并发能力有一定诉求。 OM CM GTM ETCD CN DN 业务应用下发SQL给CN ,CN利用数据库的优化器生成执行计划,下发给DN,每个DN会按照执行计划的要求去处理数据,处理完成后DN将结果集返回给CN进行汇总,最后CN将汇总后的结果返回给业务应用。 主备版 高可用(1主2备):采用一主两备三节点的部署模式,包含一个分片。 单副本:采用单节点的部署模式,仅包含一个CMS和一个DN组件,不适用于生产环境。单副本实例仅支持2.2及以上版本实例。由于部署在单台机器上,因此无法保障可用性(SLA)。 否 数据量较小,且长期来看数据不会大幅度增长,但是对数据的可靠性,以及业务的可用性有一定诉求。 OM CM ETCD DN 业务应用直接下发任务给DN, DN处理完成后再将结果返回给业务应用。 OM:运维管理模块(Operation Manager)。提供集群日常运维、配置管理的管理接口、工具。 CM:集群管理模块(Cluster Manager)。管理和监控分布式系统中各个功能单元和物理资源的运行情况,确保整个系统的稳定运行。 GTM:全局事务管理器(Global Transaction Manager),负责生成和维护全局事务ID、事务快照、时间戳、sequence信息等全局唯一的信息。 ETCD:分布式键值存储系统(Editable Text Configuration Daemon)。用于共享配置和服务发现(服务注册和查找)。 CN:协调节点(Coordinator Node)。负责接收来自应用的访问请求,并向客户端返回执行结果;负责分解任务,并调度任务分片在各DN上并行执行。 DN:数据节点(Data Node)。负责存储业务数据(支持行存、列存、混合存储)、执行数据查询任务以及返回执行结果。 GaussDB分布式版逻辑架构图如下: 图1 分布式版逻辑架构图 GaussDB主备版逻辑架构图如下: 图2 主备版逻辑架构图 父主题: 实例说明
  • 身份认证 用户访问云数据库 GaussDB时支持对数据库用户进行身份验证,包含密码验证和IAM验证两种方式。 密码验证 您需要对数据库实例进行管理,使用数据管理服务(Data Admin Service)登录数据库时,需要对账号密码进行验证,验证成功后方可进行操作。 IAM验证 您可以使用 统一身份认证 服务(Identity and Access Management, IAM)进行精细的权限管理。该服务提供用户身份认证、权限分配、访问控制等功能,可以帮助您安全地控制华为云资源的访问。您创建的IAM用户,需要通过验证用户和密码才可以使用GaussDB资源。具体请参见创建IAM用户并登录。
共100000条