Q1.PostgreSQL秒能精確到納秒嗎?
問(wèn)題描述
PostgreSQL里時(shí)間類型timestamp能精確到納秒嗎?
問(wèn)題解答
時(shí)間類型timestamp只能存儲(chǔ)到微秒,同時(shí)SQL標(biāo)準(zhǔn)2016定義了FF1-FF6時(shí)間格式,從PostgreSQL 13開始得到了支持,F(xiàn)F1-FF6表示時(shí)間數(shù)據(jù)類型秒后的第一位到第六位,比如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物理備份和恢復(fù)的兩臺(tái)機(jī)器版本不一致,能否恢復(fù)成功?
問(wèn)題描述
例如用pg_basebackup在14版本備份了一個(gè)實(shí)例,能否恢復(fù)到版本12的機(jī)器上,或者12版本用pg_basebackup備份,能否恢復(fù)到14版本的機(jī)器上。
問(wèn)題解答
不可以,物理備份恢復(fù)的大版本必須匹配。PostgreSQL有版本碰撞機(jī)制,啟動(dòng)數(shù)據(jù)目錄時(shí)會(huì)進(jìn)行檢查,另外在同一個(gè)大版本的不同beta版本也會(huì)有這個(gè)觸發(fā)機(jī)制。
Q3.如何定義大對(duì)象和如何查看一個(gè)庫(kù)中有哪些表使用大對(duì)象類型的字段?
問(wèn)題描述
PostgreSQL中如何使用大對(duì)象,如何查找哪些表的哪些字段使用了大對(duì)象類型。
問(wèn)題解答
PostgreSQL中大對(duì)象需要使用lo類型,可以參考這篇文章:PostgreSQL二進(jìn)制類型存取測(cè)試。
查找大對(duì)象類型可以使用如下語(yǔ)句:
select attrelid ::regclass, attname, atttypid ::regtype
from pg_attribute
where attnum > 0
and attisdropped = 'f'
and atttypid='lo'::regtype;
Q4.主備延遲大,有什么方法可以加快備庫(kù)回放的速度?
問(wèn)題描述
邏輯復(fù)制場(chǎng)景下,主備延遲較大,有什么方法可以加快備庫(kù)回放的速度?
問(wèn)題解答
有兩個(gè)方法可以嘗試:
- 增大邏輯解碼的內(nèi)存參數(shù)logical_decoding_work_mem
- 使用PostgreSQL 14的streaming特性開啟訂閱
Q5.創(chuàng)建數(shù)據(jù)庫(kù)會(huì)觸發(fā)檢查點(diǎn)嗎?
問(wèn)題描述
在我們創(chuàng)建數(shù)據(jù)庫(kù)的過(guò)程中,會(huì)觸發(fā)檢查點(diǎn)將緩沖區(qū)的臟數(shù)據(jù)刷寫到存儲(chǔ)嗎?
問(wèn)題解答
PostgreSQL 15之前創(chuàng)建數(shù)據(jù)庫(kù)會(huì)立刻觸發(fā)檢查點(diǎn),數(shù)據(jù)庫(kù)日志會(huì)看到如下的片段信息:
checkpoint starting: immediate force wait flush-all
PostgreSQL 15創(chuàng)建數(shù)據(jù)庫(kù)時(shí)新增了strategy參數(shù),該參數(shù)的默認(rèn)值是wal_log,也就是對(duì)模板數(shù)據(jù)庫(kù)數(shù)據(jù)文件通過(guò)寫wal的方式逐個(gè)拷貝數(shù)據(jù)塊。這種方式可以避免立刻觸發(fā)檢查點(diǎn)。




