如何在PostgreSQL中模拟数据库崩溃

时间:2018-12-26 20:13:37

标签: sql postgresql

我是postgresSQL的新手,在我的“高级数据库”课程中,我们遇到了一个问题,无法在postgres中的给定位置模拟崩溃,有人知道如何崩溃吗?

BEGIN;
UPDATE actor SET first_name = 'penny' WHERE actor_id = 1;
-- CRASH
COMMIT;

我测试了被零除,但是它没有崩溃,并且仅显示错误消息! 我在互联网上搜索了所有内容,但一无所获,有人知道该怎么做吗?

2 个答案:

答案 0 :(得分:3)

您可以在“ C”中编写自定义函数-能够发送KILL信号。

如果这种情况不必经常发生,您可以在适当的延迟后致电pg_sleep,然后手动发送信号(以root或postgres用户身份)。

请注意,这并不是人们在模拟数据库崩溃时通常会想到的。通常,您要做的是断开电源,而不仅仅是杀死postgres进程本身。这将测试整个操作系统的整个路径,并真正地检查数据,真正将其干净地持久保存在磁盘上。但是,这还需要做很多工作,尤其是对于任何有趣的(如此复杂,昂贵,重启缓慢的)磁盘系统。

答案 1 :(得分:1)

一个过程可以自杀:

select pg_terminate_backend(pg_backend_pid());

FATAL:  terminating connection due to administrator command
server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.