Size: a a a

pgsql – PostgreSQL

2021 March 30

YS

Yaroslav Schekin in pgsql – PostgreSQL
John Doe
Добрый день. Подскажите пожалуйста, как много времени максимум может пройти между транзакцией и ROLLBACK? Чем может быть ограничен ROLLBACK?
Эээ... в смысле? ROLLBACK же выполняется только внутри "своей" транзакции.
Непонятны вопросы, в общем.
источник

JD

John Doe in pgsql – PostgreSQL
Имею в виду - я сделал, например, UPDATE. Хочу сделать ROLLBACK. Я же не смогу его сделать через полгода)))
источник

JD

John Doe in pgsql – PostgreSQL
Не могу понять, какие ограничения по времени есть/подключению
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
John Doe
Имею в виду - я сделал, например, UPDATE. Хочу сделать ROLLBACK. Я же не смогу его сделать через полгода)))
Если [представить, что] это соединение с открытой транзакцией "провисело" полгода — можете, почему бы нет?
источник

СК

Сергей Кравчук... in pgsql – PostgreSQL
есть конечно общие ограничения на длительной сессии
но пока сессия открыта и не закоммичена, нет никаких ограничений на откат
источник

JD

John Doe in pgsql – PostgreSQL
Т.е. если сессию вырубило, значит и откатиться не смогу?
источник

AN

Alexander Nikitin in pgsql – PostgreSQL
думаю, человек просто наталкивался на snapshot too old в Oracle
источник

JD

John Doe in pgsql – PostgreSQL
John Doe
Т.е. если сессию вырубило, значит и откатиться не смогу?
Или есть какие-то возможности после прерывания сессии это сделать из SQL, без резервных копий и т.п. имею в виду
источник

JD

John Doe in pgsql – PostgreSQL
Alexander Nikitin
думаю, человек просто наталкивался на snapshot too old в Oracle
Да нет, пока не наталкивался, просто пытаюсь немного в тему вникнуть
источник

JD

John Doe in pgsql – PostgreSQL
John Doe
Или есть какие-то возможности после прерывания сессии это сделать из SQL, без резервных копий и т.п. имею в виду
Через SAVEPOINT как я вижу, вопрос снят
источник

АЗ

Андрей Зубков... in pgsql – PostgreSQL
John Doe
Или есть какие-то возможности после прерывания сессии это сделать из SQL, без резервных копий и т.п. имею в виду
Если сессию вырубило, а транзакция в ней не была подтверждена до этого, то транзакция автоматически откатится
источник

JD

John Doe in pgsql – PostgreSQL
Андрей Зубков
Если сессию вырубило, а транзакция в ней не была подтверждена до этого, то транзакция автоматически откатится
Я про случай когда autocommit стоит
источник

АЗ

Андрей Зубков... in pgsql – PostgreSQL
тогда rollback не имеет смысла - откатить можно только неподтвержденную еще транзакцию
источник

JD

John Doe in pgsql – PostgreSQL
Андрей Зубков
тогда rollback не имеет смысла - откатить можно только неподтвержденную еще транзакцию
Спасибо. Оч важное замечание.
источник

AS

Andrei Shmigiro in pgsql – PostgreSQL
John Doe
Т.е. если сессию вырубило, значит и откатиться не смогу?
Если сессия крэшится, то неподтвержденная транзакция откатывается автоматически (по крайней мере, должна это сделать)
источник

JD

John Doe in pgsql – PostgreSQL
А аутокоммит он может вешаться на какое-то событие/действие по умолчанию?
источник

АЗ

Андрей Зубков... in pgsql – PostgreSQL
Автокоммит подразумевает подтверждение транзакции после выполнения любого DML выражения.
Вообще, я бы предложил ознакомиться с транзакциями в доке: https://www.postgresql.org/docs/13/tutorial-transactions.html
там немного.
источник

JD

John Doe in pgsql – PostgreSQL
Спасибо
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
John Doe
Я про случай когда autocommit стоит
Этого в PostgreSQL просто не существует — транзакция откатится.
Кстати, любое другое поведение — грубейшее нарушение принципов ACID (и ISO SQL).
источник

SM

Setplus Mac in pgsql – PostgreSQL
Коллеги, подскажите, пожалуйста.

Есть такой PREPARED MULTIPLE INSERT:

PREPARE p_insert (character varying(20), inet, integer, inet, integer, character varying(64), character varying(96), character varying(255), character varying(64), character varying(64), character varying(9), integer) AS INSERT INTO tablename (col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11, col12) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12), ($13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24);

Далее выполняю

EXECUTE p_insert ( ... ) , ( ... );

postgres говорит следующее:

ERROR:  syntax error at or near ","
LINE 1: ...G75VZCQRN6JBKR3I28BXVPYUQ00B6JY','DZEAYFNZ4',4788), ('QIP3I5...

Подскажите, в чём дело?
источник