@pgsql

Страница 195 из 1062
Anton
15.12.2016
13:22:24
https://habrahabr.ru/company/postgrespro/blog/301238/ пробовали :)
пробовали, но навыков не хватает, не вышло (gdb) set ShmemVariableCache -> oldestXid = 116863884 Attempt to extract a component of a value that is not a structure pointer.

Pavel
15.12.2016
13:23:01
select txid_current();

SELECT datname, datfrozenxid FROM pg_database where datname='db';

Anton
15.12.2016
13:24:13
[local]:6432 postgres@lsd=# select txid_current(); txid_current -------------- 314895769 (1 row) Time: 1.554 ms [local]:6432 postgres@lsd=# SELECT datname, datfrozenxid FROM pg_database where datname='lsd'; datname | datfrozenxid ---------+-------------- lsd | 280759743 (1 row)

Google
Павел П.
15.12.2016
13:31:29
RU SQL SQL и разработка https://telegram.me/ru_sql

Александр
15.12.2016
13:33:09
9.4.9 версия

Славик
15.12.2016
14:35:25
как в pgadmin сделать айдишку autoincrement?

и дату current_timestamp

Anton
15.12.2016
14:43:44
create table tt ( id serial, cur_date timestamp default now());

Славик
15.12.2016
19:44:27
как сделать upsert в pg 9.6?

http://www.the-art-of-web.com/sql/upsert/

это выглядит очень страшно

попроще вариантов нет?

Darafei
15.12.2016
19:46:13
raksita
15.12.2016
19:46:51
как сделать upsert в pg 9.6?
https://www.postgresql.org/docs/current/static/sql-insert.html

Славик
15.12.2016
19:47:05
да сложно

Google
Славик
15.12.2016
19:47:14
даете пример

у меня уникальная айдишка

insert into table (...) values (...)

что дальше писать?

Darafei
15.12.2016
19:48:26
то есть доскроллить до примеров в доке сложно? :)

Славик
15.12.2016
19:49:38
on conflict (id) do update set ...?

Darafei
15.12.2016
19:50:31
прочитай надпись над этим примером. это описание тебе подходит? :)

Quet
15.12.2016
19:50:46
для этого видимо надо уметь читать…

Славик
15.12.2016
19:51:00
вот да

чего добиваетесь

признания, что не умею читать?

я не умею читать

дайте мне готовое

Quet
15.12.2016
19:51:35
уже бежим давать готовое )

Славик
15.12.2016
19:51:42
сразу бы

Евгений
16.12.2016
08:24:49
ну скажем прямо UPSERT сделан "слегка" по-идиотски: 1. допускается нарушение только одного контстрейнта, а если у меня кроме PK есть еще другие uniq поля? 2. при этом требуется указание нарушенного констрейнта. Зачем? То есть выглядит как будто заготовка под множественную проверку наруленных условий. Ищещь их в доке. А "никакого суслика нет".

Denis
16.12.2016
08:28:06
а вроде же как раз наоборот

Евгений
16.12.2016
08:28:12
Ну то есть вот что можно сделать: INSERT INTO distributors (did, dname) VALUES (7, 'Redline GmbH') ON CONFLICT (did) DO NOTHING; А что нужно уметь: INSERT INTO distributors (did, dname) VALUES (7, 'Redline GmbH') ON CONFLICT (did) DO NOTHING ON CONFLICT (dname) DO UPDATE SET dname=EXCLUDED.dame

и т.п.

Kirill
16.12.2016
08:41:09
для вашего случая давно есть begin exception when, но юзкейс какой-то у вас в примере странный

Google
Евгений
16.12.2016
09:06:01
Ну да, есть такая ерунда, которую еще с 8.х юзал. Но хочется нормальных запросов, а не давайте попробуем обновить, а если не получилось, то вставить, а если снова не получилось, то пще раз обновим.

Да, пример немного странный - из доки + добавлено.

Но юз-кейс совершенно нормальный - разные проверки на уникальность по разным критериям и разные действия в итоге. Ну и не нравится, что для единственной проверки надо указавать имя PK - это усложняет запрос и заставляет заниматься копи-пастой

Sergey
16.12.2016
09:31:17
Евгений
16.12.2016
09:32:22
я не использую в колонках, только в констрейнатх - для уникальности и для удобства, чтобы понимать где какой констрейт

но ведь PK это не всегда колонка id. он может быть и составной

Sergey
16.12.2016
09:38:54
Я пони. Для этого у меня тоже префиксы типа pk_xxxxxx

Александр
16.12.2016
09:39:05
O_o

Kirill
16.12.2016
11:38:53
BEGIN INSERT INTO table ( ... ) VALUES ( ... ); EXCEPTION WHEN OTHERS THEN GET STACKED DIAGNOSTICS _constraint_name = constraint_name; CASE WHEN _constraint_name = 'pk' THEN -- primary key WHEN _constraint_name = 'uidx' THEN -- another key ELSE .... END CASE;

Евгений
16.12.2016
11:40:01
Ясно. Спасибо. Очень лохмато, конечно. И получается сам UPSERT-то и не используется.

Славик
16.12.2016
11:40:59
+

Kirill
16.12.2016
11:43:49
upsert хорошь когда есть что-то вроде create table cnt( key uniq, count int default 0 ); insert into cnt (key) values (a),(b),(c) on conflict key do update count ++

Alexey
16.12.2016
11:47:23
BEGIN INSERT INTO table ( ... ) VALUES ( ... ); EXCEPTION WHEN OTHERS THEN GET STACKED DIAGNOSTICS _constraint_name = constraint_name; CASE WHEN _constraint_name = 'pk' THEN -- primary key WHEN _constraint_name = 'uidx' THEN -- another key ELSE .... END CASE;
Ох, круто. Я так понимаю, что в транзакции-то этот прием не сработает, так как begin в begin уже не сделать?

Kirill
16.12.2016
11:48:28
это PL/pgSQL там begin не начало транзакци, читайте как try catch

Alexey
16.12.2016
11:51:25
Понятно, т.е. функцию такую можно сделать

Kirill
16.12.2016
11:53:49
можно, а можно просто в DO $$ -- PL/pgSQL code $$;

Alexey
16.12.2016
11:55:41
Круто, я ж прав, что вы имеете ввиду, что это можно выполнить без явного создания функции?)

Kirill
16.12.2016
11:56:06
да

Google
Alexey
16.12.2016
11:56:18
Спасибо, супер ?

Darafei
16.12.2016
12:00:59
а в https://pgconf.ru/ залогиниться не удаётся

Admin
ERROR: S client not available

Darafei
16.12.2016
12:01:08
это только у меня такая проблема?

Евгений
16.12.2016
12:13:05
upsert хорошь когда есть что-то вроде create table cnt( key uniq, count int default 0 ); insert into cnt (key) values (a),(b),(c) on conflict key do update count ++
Ну то есть UPSERT - который по сути синтаксический сахар для этого "монстра" синтаксиса - нифига не выполняет свою задачу? Где можно проголосовать, чтобы его выпилить нахрен и запилить нормальный MERGE?

Kirill
16.12.2016
12:14:42
https://www.postgresql.org/list/pgsql-general/

Vadim
16.12.2016
12:29:45
Alexey
16.12.2016
12:41:36
Ну я согласен ,что иметь такой код: insert into ... values () on conflict (a) do ... on conflict (b) do ... on conflict (c) do ... было бы удобней

чем это https://gist.github.com/Logioniz/c781671d80acb9d6b512e4b9d9ea6e32

Ещё у меня возникают ситуации, когда после такого кода: insert into ... values (...) on conflict (a) do ... returning id Хочется получить id всегда на выходе

Как бы тоже могли такую возможность дать...

Evgeniy
16.12.2016
13:53:37
господа у меня есть лог файлик с форматом 2016-12-16 00:02:01 UTC LOG: duration: 1700.735 ms execute <unnamed>: UPDATE pegamkt.DISPATCHTOSENDSAY SET senderid = $1, status = $2 WHERE status= 'New' AND (interactionid, treatmentname) IN ( SELECT s.interactionid, s.treatmentname FROM pegamkt.DISPATCHTOSENDSAY s, (SELECT programmrunid ,treatmentname FROM pegamkt.DISPATCHTOSENDSAY WHERE status= 'New' AND interactionid IS NOT NULL limit 1) pid WHERE s.status= 'New' AND s.interactionid IS NOT NULL AND s.programmrunid = pid.programmrunid AND s.treatmentname = pid.treatmentname limit 10000) 2016-12-16 00:02:01 UTC DETAIL: parameters: $1 = 'be11e13d-91bc-4421-8b4d-6405d24b7082', $2 = 'Pending-CustomerRegistration' запускаю pgbadger --prefix '%t ' он не видит update запроса

что я делаю не так?

Alexander
16.12.2016
14:57:13
не туда =(

blkmrkt
16.12.2016
15:22:45
я вот думаю в одном проекте с постгреса уйти, т.к. мне консистенси не очень важна, да и вместо нормализованных данных удобнее было бы хранить кучу жсона который очень активно апсертится, данные больше для nosql подходят. И постгрес довольно много места съедает если не делать полный vacuum. Не подскажете какой другой движок?

Andrey
16.12.2016
15:24:47
Хранить недекомпонованный JSON вместо нормализованных данных - это хипстерство и похапе какое-то

Уверен, если сделать человеческую декомпозицию, блоат будет гораздо менее страшным

Но для этого нужно выгнать хипстеров из девелопмента.

blkmrkt
16.12.2016
15:28:50
Хранить недекомпонованный JSON вместо нормализованных данных - это хипстерство и похапе какое-то
там данные из api вконтача. я хоть и граблю их с указанием версии апи, но кто его знает

Google
Alexey
16.12.2016
15:29:48
Что кто его знает? Версия растёт только вверх, в старых версиях всю историю ничего не менялось.

blkmrkt
16.12.2016
15:31:46
плюс основная масса данных это диффы тех самых json документов, что-то наподобе audit table. Если например поменялось лишь 1 поле из 100, то я думаю неоптимально класть новую запись в аудит таблицу с NULL в остальных полях, да и не знаю какую правильную схему для этого подобрать

у меня сейчас аудит таблица состоит из записей (id::int, timestamp, diff::jsonb)

Sergey
16.12.2016
15:32:48
Запили отдельную таблу с объект UUID, чейнджед филд и превиус велью

blkmrkt
16.12.2016
15:32:58
у меня сейчас аудит таблица состоит из записей (id::int, timestamp, diff::jsonb)
в diff просто хранится json массив, описывающий изменения в документе [{lhs: { path, type, value }}, ...]

Sergey
16.12.2016
15:33:05
храти тока измененные проперти

вернее предыдущее значение измененных полей

blkmrkt
16.12.2016
15:34:27
Запили отдельную таблу с объект UUID, чейнджед филд и превиус велью
значит ли это что нужно сделать схему с intVal, floatVal, textVal, timestampVal, если типы данных могут быть разными?

Sergey
16.12.2016
15:36:12
Я nvarchar бахнул туда (да, я еще на MS SQL). На перфоманс пофиг, тк смысл аудита - логирование. А инсерт операции быстро проходят

Критика, как обычно, приветствуется

blkmrkt
16.12.2016
15:37:33
Я nvarchar бахнул туда (да, я еще на MS SQL). На перфоманс пофиг, тк смысл аудита - логирование. А инсерт операции быстро проходят
а я хотел бы это потом индексировать, когда монетизируюсь и появятся средства на новые серверы. Как ни смотрю, nosql вроде тут лучше подходит

Страница 195 из 1062