F.44. pg_surgery — выполнять низкоуровневые операции с данными отношений#
F.44. pg_surgery — выполнять низкоуровневые операции с данными отношений #
Модуль pg_surgery
предоставляет различные функции для выполнения операций на поврежденном отношении. Эти функции небезопасны по своей природе, и их использование может повредить (или даже дополнительно повредить) вашу базу данных. Например, эти функции могут легко использоваться для создания несогласованности таблицы с ее собственными индексами, вызывать нарушения ограничений UNIQUE
или FOREIGN KEY
, или даже делать кортежи видимыми, которые, при чтении, могут вызвать сбой сервера базы данных. Они должны использоваться с большой осторожностью и только в крайнем случае.
F.44.1. Функции #
-
heap_force_kill(regclass, tid[]) returns void
heap_force_kill
помечает указатели на строки “использованными” как “мёртвыми”, не проверяя кортежи. Предполагается, что эта функция используется для принудительного удаления кортежей, которые иначе недоступны. Например:test=> select * from t1 where ctid = '(0, 1)'; ERROR: could not access status of transaction 4007513275 DETAIL: Could not open file "pg_xact/0EED": No such file or directory. test=# select heap_force_kill('t1'::regclass, ARRAY['(0, 1)']::tid[]); heap_force_kill ----------------- (1 row) test=# select * from t1 where ctid = '(0, 1)'; (0 rows)
-
heap_force_freeze(regclass, tid[]) returns void
heap_force_freeze
помечает кортежи как замороженные, не проверяя данные кортежа. Предполагается, что эта функция используется для доступа к кортежам, которые недоступны из-за поврежденной информации о видимости или которые мешают успешному выполнению операции VACUUM из-за поврежденной информации о видимости. Например:test=> vacuum t1; ERROR: found xmin 507 from before relfrozenxid 515 CONTEXT: while scanning block 0 of relation "public.t1" test=# select ctid from t1 where xmin = 507; ctid ------- (0,3) (1 row) test=# select heap_force_freeze('t1'::regclass, ARRAY['(0, 3)']::tid[]); heap_force_freeze ------------------- (1 row) test=# select ctid from t1 where xmin = 2; ctid ------- (0,3) (1 row)
F.44.2. Авторы #
Ashutosh Sharma <ashu.coek88@gmail.com>