Postgres服务器处于热备用模式。使用异步流二进制复制。
命令类似
INSERT INTO logfile (logdate) values (current_date)
原因错误
无法在只读事务中执行INSERT。
也许应该更改为
INSERT INTO logfile (logdate)
SELECT current_date
WHERE ???
应该在什么条件下使用?它应该从Postgres 9.0开始工作如果无法使用直接的where子句,则可以在where中使用一些plpgsql函数。
也许
show transaction_read_only
应捕获结果或可以使用某些功能。
或者,应用程序可以确定数据库在启动时是否为只读。应该显示用于此目的的transaction_read_only结果。
使用PL / PgSQL中的条件语句可能。
DO $code$
BEGIN
IF NOT pg_is_in_recovery() THEN
INSERT INTO logfile (logdate) VALUES (current_date);
END IF;
END;
$code$;
但是,不建议这样做-通常最好一次测试pg_is_in_recovery()
(在应用程序代码中),然后采取相应措施。
我正在使用pg_is_in_recovery()
系统功能而不是transaction_read_only
GUC,因为它不完全相同。但是,如果您愿意,请使用:
SELECT current_setting('transaction_read_only')::bool
更多信息:DO command,conditionals in PL/PgSQL,system information functions。