暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

PostgreSQL问答-第20220925期

原创 多米爸比 2022-09-25
844

Q1.PostgreSQL秒能精确到纳秒吗?

问题描述

PostgreSQL里时间类型timestamp能精确到纳秒吗?

问题解答

时间类型timestamp只能存储到微秒,同时SQL标准2016定义了FF1-FF6时间格式,从PostgreSQL 13开始得到了支持,FF1-FF6表示时间数据类型秒后的第一位到第六位,比如FF6就是最高精度微秒。

postgres=# SELECT now(),
                  to_char(now(),'HH24:MI:SS.FF1'),
                  to_char(now(),'HH24:MI:SS.FF2'),
                  to_char(now(),'HH24:MI:SS.FF3'),
                  to_char(now(),'HH24:MI:SS.FF4'),
                  to_char(now(),'HH24:MI:SS.FF5'),
                  to_char(now(),'HH24:MI:SS.FF6');
-[ RECORD 1 ]--------------------------
now     | 2022-09-25 08:53:18.443337+08
to_char | 08:53:18.4
to_char | 08:53:18.44
to_char | 08:53:18.443
to_char | 08:53:18.4433
to_char | 08:53:18.44333
to_char | 08:53:18.443337

Q2.PostgreSQL物理备份和恢复的两台机器版本不一致,能否恢复成功?

问题描述

例如用pg_basebackup在14版本备份了一个实例,能否恢复到版本12的机器上,或者12版本用pg_basebackup备份,能否恢复到14版本的机器上。

问题解答

不可以,物理备份恢复的大版本必须匹配。PostgreSQL有版本碰撞机制,启动数据目录时会进行检查,另外在同一个大版本的不同beta版本也会有这个触发机制。

Q3.如何定义大对象和如何查看一个库中有哪些表使用大对象类型的字段?

问题描述

PostgreSQL中如何使用大对象,如何查找哪些表的哪些字段使用了大对象类型。

问题解答

PostgreSQL中大对象需要使用lo类型,可以参考这篇文章:PostgreSQL二进制类型存取测试

查找大对象类型可以使用如下语句:

select attrelid ::regclass, attname, atttypid ::regtype
from pg_attribute
where attnum > 0
and attisdropped = 'f'
and atttypid='lo'::regtype;

Q4.主备延迟大,有什么方法可以加快备库回放的速度?

问题描述

逻辑复制场景下,主备延迟较大,有什么方法可以加快备库回放的速度?

问题解答

有两个方法可以尝试:

  • 增大逻辑解码的内存参数logical_decoding_work_mem
  • 使用PostgreSQL 14的streaming特性开启订阅

Q5.创建数据库会触发检查点吗?

问题描述

在我们创建数据库的过程中,会触发检查点将缓冲区的脏数据刷写到存储吗?

问题解答

PostgreSQL 15之前创建数据库会立刻触发检查点,数据库日志会看到如下的片段信息:

checkpoint starting: immediate force wait flush-all

PostgreSQL 15创建数据库时新增了strategy参数,该参数的默认值是wal_log,也就是对模板数据库数据文件通过写wal的方式逐个拷贝数据块。这种方式可以避免立刻触发检查点。

最后修改时间:2022-09-25 10:03:40
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论