You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Уважаемые разработчики,
предлагаю реализовать неблокирующее перестроение PK таблицы (по отдельной опции конечно)
сейчас выполняется обычный DROP/CREATE
ALTER TABLE bankrupt.message
DROP CONSTRAINT pk_message;
ALTER TABLE bankrupt.message
ADD CONSTRAINT pk_message PRIMARY KEY (id_message) INCLUDE (id_annulment_message);
или так:
ALTER TABLE bankrupt.message
DROP CONSTRAINT pk_message;
DO $$
BEGIN
ALTER TABLE bankrupt.message
ADD CONSTRAINT pk_message PRIMARY KEY (id_message) INCLUDE (id_annulment_message);
EXCEPTION WHEN OTHERS THEN
IF (SQLSTATE = '42P16') THEN
RAISE NOTICE '%, skip', SQLERRM;
ELSE
RAISE;
END IF;
END; $$
LANGUAGE 'plpgsql';
Предлагаю вот такой механизм замены PK
CREATE UNIQUE INDEX CONCURRENTLY tmp1052687613_unq ON bankrupt.message USING btree (id_message) INCLUDE (id_annulment_message);
--
DO $$
DECLARE
v_indexname text;
BEGIN
v_indexname = (SELECT c.relname FROM pg_index i INNER JOIN pg_class c ON i.indexrelid = c.oid WHERE NOT indisvalid LIMIT 1); -- In INVALID state
IF v_indexname is not null THEN
RAISE 'In INVALID state - CREATE INDEX CONCURRENTLY %', v_indexname;
END IF;
END; $$
LANGUAGE 'plpgsql';
ALTER TABLE bankrupt.message DROP CONSTRAINT pk_message,
ADD CONSTRAINT pk_message PRIMARY KEY USING INDEX tmp1052687613_unq;
т.е. создаем в конкурентном режиме новый индекс, а потом одной командой выполняем удаление и добавление. 1 команда 1 транзакция.
Кстати на сейчас pgcodekeeper такие команды считает ошибочными:
The text was updated successfully, but these errors were encountered:
Уважаемые разработчики,
предлагаю реализовать неблокирующее перестроение PK таблицы (по отдельной опции конечно)
сейчас выполняется обычный DROP/CREATE
или так:
Предлагаю вот такой механизм замены PK
т.е. создаем в конкурентном режиме новый индекс, а потом одной командой выполняем удаление и добавление. 1 команда 1 транзакция.
Кстати на сейчас pgcodekeeper такие команды считает ошибочными:
The text was updated successfully, but these errors were encountered: