Size: a a a

pgsql – PostgreSQL

2020 June 10

GS

Grigory Smolkin in pgsql – PostgreSQL
> Насколько я помню, Gentoo т.п. живут по этому принципу. И можно и до LFS дойти, если хочется "выбора".
>Но почему-то у этих решений "широчайшее" использование на серверах. ;)
>
да зачем так сложно, я бы просто сделал postgresql-common опциональным
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Konstantin K
откатить транзакцию вообще никак не получится или есть решение?)
До SAVEPOINT можно откатить. В PL/pgSQL это: "Use a BEGIN block with an EXCEPTION clause instead". ;)
В процедурах можно управлять транзакциями, см. https://www.postgresql.org/docs/current/plpgsql-transactions.html
Но практического толка от этого очень немного, IMHO.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Grigory Smolkin
> Насколько я помню, Gentoo т.п. живут по этому принципу. И можно и до LFS дойти, если хочется "выбора".
>Но почему-то у этих решений "широчайшее" использование на серверах. ;)
>
да зачем так сложно, я бы просто сделал postgresql-common опциональным
По идее, это не так-то просто... там же много чего на него завязано (но я на самом деле не копался).
источник

GS

Grigory Smolkin in pgsql – PostgreSQL
Yaroslav Schekin
По идее, это не так-то просто... там же много чего на него завязано (но я на самом деле не копался).
сейчас это будет уже тяжело сделать, да
Придется или мейнтейнить один сложный systemd unit, или мейнтейнить два разных
источник

GS

Grigory Smolkin in pgsql – PostgreSQL
или вообще поддерживать две разные сборки, что совершенно неподъемно
источник

KK

Konstantin K in pgsql – PostgreSQL
Yaroslav Schekin
До SAVEPOINT можно откатить. В PL/pgSQL это: "Use a BEGIN block with an EXCEPTION clause instead". ;)
В процедурах можно управлять транзакциями, см. https://www.postgresql.org/docs/current/plpgsql-transactions.html
Но практического толка от этого очень немного, IMHO.
во вложенных циклах происходит вставка данных, сначала в основную таблицу, потом с её id в дочерние таблицы... и при ошибке валидации надо откатить всё что вставилось в рамках верхней итерации
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Konstantin K
во вложенных циклах происходит вставка данных, сначала в основную таблицу, потом с её id в дочерние таблицы... и при ошибке валидации надо откатить всё что вставилось в рамках верхней итерации
Казалось бы, SAVEPOINT (exception) подходят... нет?
источник

KK

Konstantin K in pgsql – PostgreSQL
я воткнул rollback в блок exception и получил ошибку
источник

KK

Konstantin K in pgsql – PostgreSQL
но у меня функция, а не процедура :)
источник

KK

Konstantin K in pgsql – PostgreSQL
хз бывают ли процедуры в 9.6
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Konstantin K
я воткнул rollback в блок exception и получил ошибку
Вам не нужен ROLLBACK. Возникновение exception вызывает откат этого блока, вот и всё.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Konstantin K
хз бывают ли процедуры в 9.6
Нет. И они тут и не нужны.
источник

KK

Konstantin K in pgsql – PostgreSQL
о! спасибо, проверю)
источник

DM

Dmitry Marakasov in pgsql – PostgreSQL
А есть какие-нибудь best practices как готовить дампы базы чтобы их можно было выкладывать для скачивания внешним людям которые хотят поднять базу и поиграть  с данными?

Пока пришёл к pg_dump --clean --if-exists --no-owner + вырезанию DROP/CREATE/COMMENT ON EXTENSION sed'ом.

Так дамп можно накатить как на пустую, так и на уже налитую базу, не важно как она называется, и делать это можно из-под пользователя без риска повредить несвязанные базы. А экстеншоны настраиваются суперпользователем отдельно.
источник

В

Валерий in pgsql – PostgreSQL
Dmitry Marakasov
А есть какие-нибудь best practices как готовить дампы базы чтобы их можно было выкладывать для скачивания внешним людям которые хотят поднять базу и поиграть  с данными?

Пока пришёл к pg_dump --clean --if-exists --no-owner + вырезанию DROP/CREATE/COMMENT ON EXTENSION sed'ом.

Так дамп можно накатить как на пустую, так и на уже налитую базу, не важно как она называется, и делать это можно из-под пользователя без риска повредить несвязанные базы. А экстеншоны настраиваются суперпользователем отдельно.
источник

DM

Dmitry Marakasov in pgsql – PostgreSQL
Чувствительной информации у меня нет, это не нужно
источник

В

Валерий in pgsql – PostgreSQL
вопрос не понял )
источник

В

Валерий in pgsql – PostgreSQL
тогда ddl с переменными которые пользователь сможет сам указать в виде названия схем таблиц и ролей
источник

DM

Dmitry Marakasov in pgsql – PostgreSQL
не распарсил
источник

В

Валерий in pgsql – PostgreSQL
както так
SET SESSION "my.session.schema" = 'ESI';

DO $shenanigans$
DECLARE
   query TEXT;
   schema TEXT := '"'||current_setting('my.session.schema')||'".';
BEGIN
   query = '
       CREATE TABLE '||schema||'"Azx12"(
           "catID"    integer NOT NULL,
           "catName"  varchar(100) DEFAULT NULL,
           "nameTCID" integer DEFAULT NULL,
           "descTCID" integer DEFAULT NULL
       );
   ';
   EXECUTE query;
END $shenanigans$;
источник