小编Fli*_*mzy的帖子

Postgres 卡在恢复模式

我有一个处于恢复模式的 PostgreSQL 独立实例。一直在说

2014-03-24 18:45:57 MDT FATAL:  the database system is starting up
Run Code Online (Sandbox Code Playgroud)

几个小时,并ps显示:

postgres  2637  0.1  0.1 116916  4420 ?        Ds   15:43   0:18 postgres: startup process   recovering 00000001000000040000007E
Run Code Online (Sandbox Code Playgroud)

有没有办法观察恢复的进度,最好是使用 ETA?我怎样才能让这个过程“解除卡住”?

我可以使用标准的启动/停止脚本停止 postgres,但是当我再次启动它时,它仍然停留在恢复模式。

Debian 7.4、Linux 内核 3.2.0、PostgreSQL 9.1.12


的输出strace -p 2637

Process 2637 attached - interrupt to quit
close(154)                              = 0
getppid()                               = 2600
open("pg_clog/0003", O_RDWR|O_CREAT, 0600) = 154
lseek(154, 221184, SEEK_SET)            = 221184
write(154, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 8192) = 8192
fsync(154)                              = 0
Run Code Online (Sandbox Code Playgroud)

上面的输出似乎无限重复。


一个 gdb 回溯(随后的三个 …

postgresql recovery

13
推荐指数
1
解决办法
6万
查看次数

如何在 PostgreSQL 中为单元测试伪造 inet_client_addr()?

我有一个简单的存储过程,其返回值取决于inet_client_addr(). inet_client_addr()在测试我的存储过程时,如何为了单元测试的目的而覆盖?

到目前为止,我想出的唯一解决方案是围绕inet_client_addr()以下内容创建一个包装函数:

CREATE FUNCTION my_inet_client_addr() RETURNS INET AS $$
    SELECT inet_client_addr();
$$ LANGUAGE sql;
Run Code Online (Sandbox Code Playgroud)

然后在我的函数中使用它:

CREATE local_connection() RETURNS BOOLEAN AS $$
    SELECT my_inet_client_addr() = '127.0.0.1';
$$ LANGUAGE sql;
Run Code Online (Sandbox Code Playgroud)

然后在我的单元测试中,我可以重新定义my_inet_client_addr()

BEGIN;
SELECT PLAN(2);
REPLACE FUNCTION my_inet_client_addr() RETURNS INET AS $$
    SELECT '127.0.0.1'::INET;
$$ LANGUAGE sql;

is(local_connection(),TRUE,'Connection from 127.0.0.1 is local');

REPLACE FUNCTION my_inet_client_addr() RETURNS INET AS $$
    SELECT '192.168.1.1'::INET;
$$ LANGUAGE sql;

is(local_connection(),FALSE,'Connection from 192.168.1.1. is not local');

ROLLBACK;
Run Code Online (Sandbox Code Playgroud)

有没有办法在没有包装功能的情况下完成相同的任务my_inet_client_addr()

postgresql stored-procedures unit-test

8
推荐指数
1
解决办法
689
查看次数