我是postgresSQL的新手,在我的“高级数据库”课程中,我们遇到了一个问题,无法在postgres中的给定位置模拟崩溃,有人知道如何崩溃吗?
BEGIN;
UPDATE actor SET first_name = 'penny' WHERE actor_id = 1;
-- CRASH
COMMIT;
我测试了被零除,但是它没有崩溃,并且仅显示错误消息! 我在互联网上搜索了所有内容,但一无所获,有人知道该怎么做吗?
答案 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.