• [问题求助] GaussDB和PostgreSQL的区别在哪里?
    GaussDB和PostgreSQL的区别在哪里?
  • [数据库] 【Postgresql移植】【CRC检验算法】AArch64平台如何使用__crc32cb/cw/cd/ch
    postgresql移植指南中,关于AArch64平台(src/port/pg_crc32c_armv8.c)中描述的“使用__crc32cb/cw/cd/ch”的具体操作方法
  • [技术干货] 阿里李飞飞5月底发布的PolarDB for PostgreSQL直接针对OpenGauss,华为只能跟上
    上个帖子乏人问津,只好自己再说几句。纯粹的性能驱动的数据处理市场已趋于饱和,未来市场的发展方向更多的将是功能和性价比驱动。最能适应未来市场的数据平台将会是云上的全球分布的HTAP数据库,它将结合MPP数据库的并发计划并发执行技术与New SQL的基于时钟的全球分布部署能力和基于共识协议的高可靠模块,能在全球部署下支持HTAP应用,做到One size fits most。典型应用是用以替换原有的单机或集群TP系统,以本地TP为主,分布TP为辅,并增加分布AP能力,可直接访问分布的数据无需ETL。上述构架的优点是在单一系统内,以尽可能小的成本满足绝大多数客户的多样的数据处理需求。阿里云5月底发布的PolarDB for PostgreSQL正是这样的体系,并且直接针对OpenGauss。在数据库国产替换的潮流下将之开源是为了抢夺客户,纯TP的OpenGauss将没有多少竞争能力,华为要想不被彻底甩开,只有跟进同样的构架。所幸现有一条终南捷径,那就是将成熟的基于PostgreSQL的YugabyteDB上的基于混合时钟HLC的分布事务处理模块和基于Raft的HA移植到现有的分布PostgreSQL上。
  • [技术干货] PostgreSQL 高质量学习交流网站及链接推荐
    在学习和使用PG过程中,经常会翻阅一些资料,现在我把在这个过程积累得一些高质量的链接分享给大家。如果大家发现很好的链接,也欢迎分享给我,从而改进。官方   =================官方:https://www.postgresql.org/官方仓库:https://git.postgresql.org/gitweb/planet PG:https://planet.postgresql.org/  包括Top posters、Top teams、Feeds、Planet官方wiki:https://wiki.postgresql.org/wiki/Main_PageWeekly News: https://postgresweekly.com/英文手册:https://www.postgresql.org/docs/中文手册:http://www.postgres.cn/docs/10/中文社区:http://www.postgres.cn/pgadmin:https://www.pgadmin.org/#pg大会:https://postgresconf.org/插件大全:https://pgxn.org/pg欧洲:https://www.postgresql.eu/commitfest: https://commitfest.postgresql.org/厂商   =====================openGauss:https://opengauss.org/zh/富士通: https://www.postgresql.fastware.com/  postgres pro: https://postgrespro.com/二象限:https://www.2ndquadrant.com/en/EDB:https://www.enterprisedb.com/Crunchy Data:https://www.crunchydata.com/PostgreSQL Internal :http://postgresintl.com/HeteroDB:http://heterodb.com/  PG-Strom插件,基于GPU和NVME,大数据处理Cybertec:https://www.cybertec-postgresql.com/时序数据库 timescale:https://docs.timescale.com/https://www.pipelinedb.com/  High-performance time-series aggregationhttps://www.citusdata.com/ 分布式shardinghttps://pgexercises.com/XL官网:https://www.postgres-xl.org/pganalyze:https://pganalyze.com/https://www.elephantsql.com/博客  =====================数据库周报:https://dbweekly.com/issues、二象限博客中心:https://www.2ndquadrant.com/en/blog/PG每周新闻 https://grantzhou.github.io/PostgreSQL-Weekly-News-1-9/Bruce Momjian博客(PG社区co-founder) https://momjian.us/ 最新资讯:http://depesz.com/专注PG数据库维护的一个小团队  https://dataegret.com/news-blog/开源关系型数据库PostgreSQL生态系列资源 https://github.com/liuyuanyuan/FantasticPostgres/internal Postgres:http://www.interdb.jp/pg/index.htmlhttp://postgresguide.com/https://blog.panoply.io/https://pgdba.org/SeveralNines:https://severalnines.com/database-bloghttps://blog.panoply.io/percona:https://www.percona.com/blog其它  =====================https://pgmodeler.io/ PG建模PGTune https://pgtune.leopard.in.ua/#/  参数优化小工具
  • [开发应用] GaussDB A 的默认数据库postgres可以修改么?
    【功能模块】数据库名称修改;问题描述:使用GaussDB A数据库用户omm登录, 使用gsql命令行修改的默认数据库postgres,提示有连接section正在使用,而连接使用gsql停止命令,停止不掉;问题1:请问默认数据库postgres是不可以修改的是么?问题2:使用数据库用户,我可以一直免密登录postgres,是么?期待专家的接疑,谢谢
  • [技术干货] 7天玩转PostgreSQL基础训练营学习分享
    活动贴:【打卡帖】0元限时学《7天玩转PostgreSQL基础训练营》,大奖等你来哦!课程链接:https://education.huaweicloud.com/courses/course-v1:HuaweiX+CBUCNXD048+Self-paced/courseware/fb989107b5ea4f368fb11447ea2d8b63/a75cf56dbace4384993b27d81160bd92/课程知识总结:7天玩转PostgreSQL基础训练营(一)7天玩转PostgreSQL基础训练营(二)7天玩转PostgreSQL基础训练营(三)7天玩转PostgreSQL基础训练营(四)7天玩转PostgreSQL基础训练营(五)7天玩转PostgreSQL基础训练营(六)7天玩转PostgreSQL基础训练营(七)
  • [技术干货] GaussDB相比PostgreSQL做了哪些内核优化:
    内核优化        1. 进程模型改为线程模型        2. 高可用架构增强        3. 使用etcd集群存储全局事务号        4. XID事务号从32位改为64位        5. GTM性能增强        6. 流复制增强
  • [技术干货] PostgreSql 重建索引的操作
    PostgreSql数据库的重建索引时通过REINDEX命令来实现的,如reindexindex_name;其语法是:REINDEX { INDEX | TABLE | DATABASE | SYSTEM } name [ FORCE ];下面解释下说明情况下需要:1、当由于软件bug或者硬件原因导致的索引不再可用,索引的数据不再可用;2、当索引包含许多空的或者近似于空的页,这个在b-tree索引会发生。Reindex会腾出空间释放哪些无用的页(页就是存放数据的一个单位,类似于block)。3、PostgreSql数据库系统修改了存储参数,需要重建不然就会失效(如修改了fillfactor参数);4、创建并发索引时失败,遗留了一个失效的索引。这样的索引不会被使用,但重构后能用。一个索引的重构不能并发的执行。下面介绍下重构索引命令的参数:1、INDEX 重构指定的索引;2、TABLE 重构指定表的所有索引,包括下级TOAST表;3、DATABASE重构指定数据库的所有索引,系统共享索引也会被执行。需要注意的是这个级别的重构不能再一个事务块中执行。4、SYSTEM 重构这个系统的索引包含当前的数据库。共享系统中的索引页是被包含的,但是用户自己的表是不处理的,同样也不能在一个事务块中执行。5、Name 按照不同级别索引的名称。6、FORCE 已经被废除即使写了也是被忽略的。示例:REINDEX INDEX my_index; REINDEX TABLE my_table; REINDEX DATABASE broken_db;另外需要注意的是:1、重建索引不同的级别的重构需要不同的权限,比如table那么就需要有这个表的权限即需要有操作索引的权限,如超级用户postgres拥有这个权限。2、重构索引的目的是为了当索引的数据不可信时,即对于成本的计算会出现偏差较大,无益于优化器得到最优的执行计划以至于性能优化失败。3、重构索引类似于先删除所有再创建一个索引,但是索引的条目是重新开始的。重构时当前索引是不能写的,因为此时有排他锁。4、在8,1版本之前REINDEX DATABASE 只包含系统索引,并不是期望的所有指定数据库的索引。7.4版本之前REINDEX TABLE不会自动执行下级TOAST tables。关于TOAST tables的含义:TOAST直接翻译的话就是切片面包(slicedbread)的意思,全称是The Oversized-Attribute Storage Technique,为什么会有OVERSIZED-ATTRIBUTE呢?原因很简单,因为在PostgreSQL,一条记录不能跨PAGE存储,跨越PAGE的话必须使用TOAST(即unaligned,与原表分开存储)存储。TOAST表不能独立创建,只有当普通表包含了main,extended或external存储格式的字段时,系统会自动创建一个和普通表关联的TOAST表。当一条记录(tuple)在存储时(如果压缩的话算压缩后的大小)大于TOAST_TUPLE_THRESHOLD(通常是2kB)这个值时,会存储到TOAST表。而此时在普通表的该字段处包含了一个指向TOAST的tableoid和chunk_id的数据,从而能够找到该字段的记录。
  • [技术干货] PostgreSQL 实现sql放入文件批量执行
    ostgreSQL sql放入文件,登入数据库之后批量执行1. 建立测试sql:vi aa.sql插入:猜测每条sql语句是用;分隔的,function中的多个;也会自动识别。create table tb1(id integer); insert into tb1 select generate_series(1,10); select * from tb1; delete from tb1 where id<3; select * from tb1;2. 将aa.sql放入 ./src/postgresql-9.3.5/src/tutorial下(./src/postgresql-9.3.5/src/tutorial是PostgreSQL自动识别的目录,当然也可以放在任意目录,比如/home/postgres/aa.sql)3. 切换用户登入su postgres psql postgres4. 执行:当输入\i时候,会自动检测到./src/postgresql-9.3.5/src/tutorial下的文件,PostgreSQL的测试例子也放在此目录下postgres=# \i aa.sql (\i /home/postgres/aa.sql) id | name ----+------ 1 | join 2 | join 3 | join 4 | join 5 | join 6 | join 7 | join 8 | join 9 | join 10 | join (10 rows) CREATE TABLE INSERT 0 10 id ---- 1 2 3 4 5 6 7 8 9 10 (10 rows) DELETE 2 id ---- 3 4 5 6 7 8 9 10 (8 rows) postgres=# 第二个例子:vi bb.sql:写入一个function:create function func1()returns void as $$ declare begin delete from person where id>5; delete from tb1 where id>5; end $$language plpgsql; select func1();切换到postgres,登入之后执行:执行前:postgres=# select * from person ; id | name ----+------ 1 | join 2 | join 3 | join 4 | join 5 | join 6 | join 7 | join 8 | join 9 | join 10 | join (10 rows) postgres=# select * from tb1 ; id ---- 3 4 5 6 7 8 9 10 (8 rows)执行:postgres=# \i bb.sql CREATE FUNCTION func1 ------- (1 row)执行后:postgres=# select * from person ; id | name ----+------ 1 | join 2 | join 3 | join 4 | join 5 | join (5 rows) postgres=# select * from tb1 ; id ---- 3 4 5 (3 rows) postgres=# 5. 也可以使用psql命令执行pslq -d postgres -U postgres -f /home/postgres/aa.sql
  • [运维管理] roach restore clean为什么把postgresql.sql等文件删除了
    roach备份一个gaussdb A库到磁盘上,然后在另一个gaussdb集群中按照roach restore clean restore-new-cluster进行恢复,恢复报找不到config文件.查看日志发现clean过程把postgresql.conf等文件都删除了,然后另一个gaussdb集群就挂了。然后尝试启动集群也起不来了也是报pg等配置文件没有。问要怎么处理?重装另一个gaussdb集群?这个恢复过程问题出在哪儿?
  • [技术干货] 跨库操作dblink和postgres_fdw
    # 跨库操作dblink和postgres_fdw 插件介绍: 使用dblink和postgres_fdw可以实现跨库操作其他PostgreSQL库。 # 系统要求 PostgreSQL 9.5+ 与要连接的其他PostgreSQL网络连通 # dblink 1、新建dblink插件。 ```sql CREATE EXTENSION dblink; ``` 2、连接远程数据库 ```sql --SELECT dblink_connect('', ''); SELECT dblink_connect('mydb', 'dbname=postgres port=5432 host=localhost'); dblink_connect ---------------- OK (1 row) ``` 该函数有两个参数:connname和connstr,其中connname是可选参数。 connname:要用于这个连接的名字。如果被忽略,将打开一个未命名连接并且替换掉任何现有的未命名连接。 connstr:数据库连接串信息,格式为:hostaddr= port=端口号> dbname=数据库名> user=用户名> password=密码> 3、执行sql命令 ```sql --执行查询 SELECT * FROM dblink('mydb', 'select * from test') as test(id integer, info varchar(8)); id | info ----+------ 1 | a 1 | b (2 rows) --执行插入 SELECT dblink_exec('mydb', 'insert into test values (3,''c'');'); dblink_exec ------------- INSERT 0 1 (1 row) SELECT * FROM dblink('mydb', 'select * from test') as test(id integer, info varchar(8)); id | info ----+------ 1 | a 2 | b 3 | c (3 rows) ``` 4、查询连接状态 ```sql SELECT dblink_get_connections(); dblink_get_connections ------------------------ {mydb} (1 row) ``` 5、关闭远程连接 ```sql SELECT dblink_disconnect('mydb'); ``` 更多内容请参考[dblink](https://www.postgresql.org/docs/12/dblink.html) # postgres_fdw 1、新建postgres_fdw插件 ```sql CREATE EXTENSION postgres_fdw; ``` 2、然后使用CREATE SERVER创建一个外部服务器 ```sql CREATE SERVER foreign_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'x.x.x.x', port '5432', dbname 'foreign_db'); ``` 3、使用CREATE USER MAPPING一个用户映射,每一个用户映射都代表你想允许一个数据库用户访问一个外部服务器。 ```sql --指定要映射到外部服务器的本地数据库用户名local_user CREATE USER MAPPING FOR local_user SERVER foreign_server OPTIONS (user 'foreign_user', password 'password'); ``` 4、为每一个你想访问的远程表使用CREATE FOREIGN TABLE或者IMPORT FOREIGN SCHEMA创建一个外部表 ```sql CREATE FOREIGN TABLE foreign_table ( id integer, info varchar(8) ) SERVER foreign_server OPTIONS (schema_name 'some_schema', table_name 'some_table'); ``` 5、查询 ```sql SELECT * FROM foreign_table; id | info ----+------ 1 | a 2 | b 3 | c (3 rows) ``` 更多内容请参考[postgres_fdw](https://www.postgresql.org/docs/12/postgres-fdw.html)
  • [问题求助] OpenGauss或者RDS for Postgresql
    想问下OpenGauss或者RDS for Postgresql是否集成的有PostGIS3?
  • [技术干货] PostgreSQL插件之pg_hint_plan
    # pg_hint_plan pg_hint_plan通过特殊形式的注释中的提示短语来控制执行计划。 ## 概要 PostgreSQL使用基于代价的优化器,该优化器的代价计算利用的是数据统计信息,而不是静态规则。对于一条SQL语句,优化器会估计所有可能的执行计划的代价,然后最终选择代价最低的执行计划。由于优化器不会考虑列之间的相关性,因此,最终选出来的执行计划可能并不是完美的。 `pg_hint_plan`允许我们在sql语句中通过特殊格式的提示来调整执行计划,达到优化执行计划的目的。 ## 使用方法 ### 基本使用 pg_hint_plan在目标SQL语句中读取特殊格式的提示短语。提示短语以字符`/*+`开始,`*/`结尾。提示短语由提示名和参数(用括号包起来,两个参数之间用空格分隔)组成。为了增加可读性,每一个提示短语可另起一行。 在下面的示例中,`HashJoin`被选择为连接方法,并使用`Seq Scan`对表`pgbench_accounts`进行扫描。 ```sql postgres=# /*+ postgres*# HashJoin(a b) postgres*# SeqScan(a) postgres*# */ postgres-# EXPLAIN SELECT * postgres-# FROM pgbench_branches b postgres-# JOIN pgbench_accounts a ON b.bid = a.bid postgres-# ORDER BY a.aid; QUERY PLAN --------------------------------------------------------------------------------------- Sort (cost=31465.84..31715.84 rows=100000 width=197) Sort Key: a.aid -> Hash Join (cost=1.02..4016.02 rows=100000 width=197) Hash Cond: (a.bid = b.bid) -> Seq Scan on pgbench_accounts a (cost=0.00..2640.00 rows=100000 width=97) -> Hash (cost=1.01..1.01 rows=1 width=100) -> Seq Scan on pgbench_branches b (cost=0.00..1.01 rows=1 width=100) (7 rows) ``` ## 提示表 在上一节中,介绍了`pg_hint_plan`中提示短语的使用,但是当查询语句无法编辑时,是很不方便的。这种情况,可以将提示放在特殊的表`hint_plan.hints`中,表结构如下所示: | 列名 | 描述 | | ----------------- | ------------------------------------------------------------ | | id | 提示行唯一标识符。该列按顺序自动填充。 | | norm_query_string | 与要提示的查询相匹配的模式。查询中的常量必须替换为`?`,空格很重要。 | | application_name | 应用该提示的会话名称。空字符串表示任何application_name的会话。 | | hints | 提示短语。其中不包括注释标记 | 如何使用表`hint_plan.hints` ```sql postgres=# INSERT INTO hint_plan.hints(norm_query_string, application_name, hints) postgres-# VALUES ( postgres(# 'EXPLAIN (COSTS false) SELECT * FROM t1 WHERE t1.id = ?;', postgres(# '', postgres(# 'SeqScan(t1)' postgres(# ); INSERT 0 1 postgres=# UPDATE hint_plan.hints postgres-# SET hints = 'IndexScan(t1)' postgres-# WHERE id = 1; UPDATE 1 postgres=# DELETE FROM hint_plan.hints postgres-# WHERE id = 1; DELETE 1 ``` 用户在创建`pg_hint_plan`插件时,默认拥有表`hint_plan.hints`的权限,且提示表中的优先级高于SQL语句中提示短语的优先级。 ### 提示类型 根据对象类型以及如何影响计划提示短语可分为六类。扫描方法、连接方法、连接顺序、行号校正、并行查询和GUC设置。您可以在[提示列表](####提示列表)中看到每种类型的提示短语列表。 #### 扫描方法提示 扫描方法提示对目标表强制执行特定的扫描方法。pg_hint_plan通过表的别名(如果存在别名)识别目标表。扫描方法可以是,`SeqScan`、`IndexScan`等。 扫描提示对普通表、继承表、UNLOGGED表、临时表和系统表都有效。对于外部表、表函数、VALUES子句、通用表表达式(CTEs)、视图和子查询扫描提示无效。 ```sql postgres=# /*+ postgres*# SeqScan(t1) postgres*# IndexScan(t2 t2_pkey) postgres*# */ postgres-# SELECT * FROM table1 t1 JOIN table table2 t2 ON (t1.key = t2.key); ``` #### 连接方法提示 连接方法提示对涉及表的连接方法进行强制指定。 连接方法提示对普通表、继承表、UNLOGGED表、临时表、外部表、系统表、表函数、VALUES子句、通用表表达式(CTEs)有效。对视图和子查询无效。 #### 连接顺序提示 此提示“ Leading”在两个或多个表上强制执行连接顺序。有两种执行方法。一种是强制执行特定的连接顺序,但不限制每个连接级别的方向。另一个加入连接方向。详细信息请参见[提示列表](####提示列表)。 ```sql postgres=# /*+ postgres*# NestLoop(t1 t2) postgres*# MergeJoin(t1 t2 t3) postgres*# Leading(t1 t2 t3) postgres*# */ postgres-# SELECT * FROM table1 t1 postgres-# JOIN table table2 t2 ON (t1.key = t2.key) postgres-# JOIN table table3 t3 ON (t2.key = t3.key); ``` #### 行号校正提示 行号纠正提示会纠正由于计划器限制而导致连接的行号错误估计。 ```sql postgres=# /*+ Rows(a b #10) */ SELECT... ; --设置连接结果的行号为10 postgres=# /*+ Rows(a b +10) */ SELECT... ; --将行号增加10 postgres=# /*+ Rows(a b -10) */ SELECT... ; --将行号减10 postgres=# /*+ Rows(a b *10) */ SELECT... ; --将行号扩大为原来的10倍 ``` #### 并行查询提示 并行查询提示在扫描时会强制并行执行配置。第三个参数表示强度。soft表示pg_hint_plan只更改max_parallel_worker_per_gather。hard更改所有参数,使提示数字有效。并行查询提示对普通表、继承表、UNLOGGED表和系统表有效;对外部表、表函数、VALUSES子句、通用表表达式(CTEs)、视图和子查询无效。可以通过指定内部表的真实名或别名来作为目标对象。 下面的示例表示每个表执行查询的方式不同。 ```sql postgres=# explain /*+ Parallel(c1 3 hard) Parallel(c2 5 hard) */ SELECT c2.a FROM c1 JOIN c2 ON (c1.a = c2.a); QUERY PLAN ------------------------------------------------------------------------------- Hash Join (cost=2.86..11406.38 rows=101 width=4) Hash Cond: (c1.a = c2.a) -> Gather (cost=0.00..7652.13 rows=1000101 width=4) Workers Planned: 3 -> Parallel Seq Scan on c1 (cost=0.00..7652.13 rows=322613 width=4) -> Hash (cost=1.59..1.59 rows=101 width=4) -> Gather (cost=0.00..1.59 rows=101 width=4) Workers Planned: 5 -> Parallel Seq Scan on c2 (cost=0.00..1.59 rows=59 width=4) postgres=# EXPLAIN /*+ Parallel(tl 5 hard) */ SELECT sum(a) FROM tl; QUERY PLAN ----------------------------------------------------------------------------------- Finalize Aggregate (cost=693.02..693.03 rows=1 width=8) -> Gather (cost=693.00..693.01 rows=5 width=8) Workers Planned: 5 -> Partial Aggregate (cost=693.00..693.01 rows=1 width=8) -> Parallel Seq Scan on tl (cost=0.00..643.00 rows=20000 width=4) ``` #### 设置临时的GUC参数 在计划时更改GUC参数,如果计划器的配置参数没有与其它任何提示冲突,所设置的GUC就有效。同样的GUC参数,以最后一次设置为准。 ```sql postgres=# /*+ Set(random_page_cost 2.0) */ postgres-# SELECT * FROM table1 t1 WHERE key = 'value'; ``` #### 提示列表 ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/forums/attachment/forum/202103/18/1943211xo7sdwv1sejjqxe.png)
  • [热门活动] 【打卡帖】0元限时学《7天玩转PostgreSQL基础训练营》,大奖等你来哦!
    课程链接:https://education.huaweicloud.com/courses/course-v1:HuaweiX+CBUCNXD048+Self-paced/courseware/fb989107b5ea4f368fb11447ea2d8b63/a75cf56dbace4384993b27d81160bd92/ 华为云 · 7天实战营系列活动2021年 -- 7天玩转PostgreSQL基础实战营让你7天轻松掌握PG!完成打卡任务,将有机会获得三合一数据线、神秘潮酷盲盒、旅行五件套等多重豪礼哦~限额免费招募,快来报名吧!活动参与流程  Step1. 请点击链接,先报名活动活动报名链接:https://developer.huaweicloud.com/activity/PostgreSQL.html(本次活动涉及代金券发放,请务必填写,数量有限,先到先得)Step2. 添加群助手好友并回复“PostgreSQL”或“PG”,免费入群!Step3. 入群后,群助手会通知开课时间;Step3. 开课后,请按照节奏学习视频课程,完成每日打卡任务(打卡任务完成后,请在本帖回复截图) 活动时间  招募期:2021.03.23-2021.04.07培训期:2021.04.08-2021.04.16课程大纲  专家介绍活动奖励活动规则1.活动参与方式:招募期流程:(1)注册华为云中国站账号并登录;(2)点击活动页中的“立即报名”按钮先填写报名表;(3)扫描二维码,添加社群助手微信(18209232786 ),回复“PostgreSQL”或“PG”,小助手拉您入群。训练期流程:(1)微信社群助手每日发布当日课程内容及规则,学员完成任务并打卡成功,获得阶段性奖励。 训练期内打卡规则:(1) 打卡时间:每日0:00~23:59;(2) 打卡方式:Step1:请打开当天的“打卡作业”(每一章的第3小节);Step2:按照要求完成作业;Step3:按以下格式在打卡贴内回复完成后的打卡截图:第一行:DayX(X=1到7)+华为云账号+微信昵称            (打卡作业截图)eg:Day1+grandmaster+华为云1号小助手      (打卡作业截图)(3) 打卡须知:① 打卡需按照打卡方式要求操作;② 如当天打卡任务有打卡示例,学员所回复打卡截图中必须需显示华为云中国站账号,且为当日操作截图;③ 采用闯关打卡模式,每日只计算一次有效打卡;④ 若当日未进行打卡,训练期内设置3次补打卡机会,超过3次不可再补打卡;⑤ 社群助手将对每日的打卡内容进行审核,审核周期为3~5个工作日,未按照要求上传打卡任务,将被视为无效打卡,不计入打卡天数。2.训练期内评奖方式:(1)完成第1天打卡完成第1天打卡任务,可获得抽奖机会,奖品为三合一数据线1个 ;奖品数量上限为80份,中奖概率(≤100%)为“80/完成连续打卡1天任务的总人数”;兑奖时间不可超过训练期第二天,过期无效。(2)连续打卡3天连续完成3天打卡可获得抽奖机会,奖品为精美盲盒奖励1份,奖品数量上限为50份,中奖概率(≤100%)为“50/完成连续打卡3天任务的总人数”;兑奖时间不可超过训练期第四天,过期无效。(3)连续打卡7天连续完成7天打卡可直接获得华为云云享专家直通车机会,奖品为旅行5件套1个,奖品数量上限为30份,中奖概率(≤100%)为“30/完成连续打卡7天任务的总人数”;兑奖时间不可超过训练期第八天,过期无效。3.奖品发放说明:每位参加活动的用户理解并同意,为联系获奖用户以及奖品发放的需要,用户须在参与活动之时提供诸如姓名、联系方式、电子邮箱、通讯地址等真实个人信息,活动主办方将仅为前述目的以及适用法律规定的最小限度内收集和使用用户的个人信息,本次活动所收集的个人信息将在活动结束后删除。(用户在向华为云提交个人信息之前,应阅读、了解华为云《隐私政策声明》;用户参加本活动视为理解并同意华为云《隐私政策声明》,华为云《隐私政策声明》网页地址如下:https://www.huaweicloud.com/declaration/sa_prp.html)。获奖用户在领奖界面填写获奖信息,活动结束且用户填写完整领奖信息后14个工作日内,将统一发出奖品,所有实物奖品包邮,不额外收取任何费用。由于获奖用户自身原因(包括但不限于提供的联系方式有误、身份不符或者通知领奖后超过30天未领取等)造成奖品无法发送的,视为获奖用户放弃领奖。为保证活动的公平公正,华为云有权对恶意刷活动资源(“恶意”是指为获取资源而异常注册账号等破坏活动公平性的行为),利用资源从事违法违规行为的用户收回抽奖及奖励资格。本活动规则由华为云在法律规定范围内进行解释。华为云保留不时更新、修改或删除本活动规则的权利。所有参加本活动的用户,均视为认可并同意遵守《华为云用户协议》,包括以援引方式纳入《华为云用户协议》的《可接受的使用政策》、《法律声明》、《隐私政策声明》、相关服务等级协议(SLA),以及华为云服务网站规定的其他协议和政策(统称为“云服务协议”)的约束。云服务协议链接的网址:http://www.huaweicloud.com/declaration/sa_cua.html如果您不同意本活动规则和云服务协议的条款,请勿参加本活动。
  • [技术干货] PostgreSQL插件之pg_cron
    pg_cron是一个使用cron语法的定时任务调度程序。作为数据库插件,它可以在数据库内部执行 PostgreSQL 的命令。 # 1 cron语法 标准cron语法,*表示每个时间段运行,特定数字表示仅在此时间。 ```cron ┌───────────── min (0 - 59) │ ┌────────────── hour (0 - 23) │ │ ┌─────────────── day of month (1 - 31) │ │ │ ┌──────────────── month (1 - 12) │ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to │ │ │ │ │ Saturday, or use names; 7 is also Sunday) │ │ │ │ │ │ │ │ │ │ ``` **注意** 1. 定时任务使用GMT时间执行; 2. 使用 crontab.guru 工具,可以方便地创建任务调度规则; # 2 注意事项 1. pg_cron需要后台守护进程,因此启动数据库前,需要将pg_cron放到shared_preload_libraries中; 2. 定时任务不会在备机上运行,但当备机升主后,定时任务会自动启动; 4. 定时任务会以任务创建者的权限执行; 5. 一个实例可以并行运行多个任务,但同一时间某个任务仅能运行一个; 6. 某个任务,需要等待前一个定时任务结束,那么该任务会进入等待队列,且会在前一个任务结束后尽快启动; # 3 使用方法 ## 创建或删除插件 ```sql -- 创建插件 CREATE EXTENSION IF NOT EXISTS pg_cron; -- 删除 DROP EXTENSION IF EXISTS pg_cron; ``` ## 创建任务 ```sql -- 任务1:每周六上午3:30(GMT),删除旧数据 SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time now() - interval '1 week'$$); -- 任务2:每天上午 10:00(GMT),执行vacuum -- 注意:任务以nightly-vacuum为命名,该接口 1.3 版本上才支持。 SELECT cron.schedule('nightly-vacuum', '0 10 * * *', 'VACUUM'); ``` ## 查看任务 ```sql SELECT * FROM cron.job; ``` ## 删除任务 ```sql SELECT cron.unschedule(job_id) ``` # 4 配置参数 | 参数名 | 功能 | 默认值 | 需要重启 | | ---- | ---- | ---- | ---- | |cron.database_name|定时任务元信息所在的数据库|postgres|是| |cron.log_statement|执行任务前,是否将sql打印到日志|true|是| |cron.log_run|是否将任务的执行信息存储到**job_run_details**表中|true|是| |cron.host|要执行定时任务的host名|localhost|是| |cron.use_background_workers|使用后台work进程,而非客户端连接执行任务|false|是| |cron.max_running_jobs|可以同时运行的job数量|5|是| **注意** 1. 1.3 及以上的版本,支持参数cron.log_run和cron.use_background_workers; 2. 1.3 及以上的版本,设置cron.use_background_workers为true后,cron.host不再生效,使用起来更加方便; 3. 使用前,需要将cron.database_name修改为创建定时任务的数据库;
总条数:103 到第
上滑加载中