@pgsql

Страница 310 из 1062
Kirill
26.04.2017
06:29:33
у вас не синтаксическая ошибка, SELECT INTO вполне себе будет работать в PL/pgSQL, а вот возвращать table нет смысла т.к. там всего одна строка

Philip
26.04.2017
12:21:51
возникает проблема с уникальностью записей в индексах и констрейнтах. констрейнты с немедленной проверкой(immediate). вот последний выловленный случай: insert into etl.positions_upload (id, dt) select p.id, now() from sales.positions p left join etl.positions_upload u on p.id = u.id where p.id >= 313207545 and u.id is null order by p.id limit 1000000 ERROR: duplicate key value violates unique constraint "uqc_positions_upload_id" DETAIL: Key (id)=(318557849) already exists. в таблице sales.positions уникальность по полю id есть. в таблице etl.positions_upload уникальность по полю обеспечивается uqc_positions_upload_id. уровень изоляции при вставке по-умолчанию read committed.

Denis
26.04.2017
12:54:56
Могу ошибаться, но дело, думаю, вот в чем. Индексы и ограничения ничего не знают про версионность - mmvc существует только на уровне таблиц. Поэтому, когда у вас производятся параллельные вставки пересекающихся данных, и одна транзакция успешно закоммитилась, в индексе или ограничении успешно появляется запись, мешающая первой транзакции. Тут нужны блокировки на уровне строк, как мне кажется кажется. Типа skip locked

Alexey
26.04.2017
13:02:09
Доброго дня. Подскажите, пожалуйста, по производительности pgcompactor на больших объёмах данных. У меня есть таблицы, приближающиеся к терабайту, а фул вакуум таких таблиц на этом сервере выполнялся порядка 12 часов. Сколько суток примерно может занять сжатие pgcompactor'ом, если в интернете пишут, что 15Гб он за 6 часов сжимает?

Google
Alexey
26.04.2017
13:02:40
И можно ли с этим что-то поделать? Распараллелить, например

Philip
26.04.2017
13:17:32
Denis Smirnov, спасибо за ответ! вы имели ввиду mvcc?

Denis
26.04.2017
13:22:38
Denis Smirnov, спасибо за ответ! вы имели ввиду mvcc?
Да, мой телефон выдаёт очень забавные автозамены.

Philip
26.04.2017
13:34:49
по поводу того что индексы ничего не знают про версионность, на сколько мне помнится, то в индексы добавляются ссылки на новые кортежи, после чего для всех последующих транзакций эти ссылки являются актуальными. Подозреваю, что наиболее верный ответ найду в исходниках, но пока нет времени туда залезть, поэтому в первую очередь надежда на тех, кто это может быть уже искал там:-)

Philip
26.04.2017
13:37:15
как раз сейчас это дописываю))

но это выглядит как костыль))

подозреваю, что появилось именно из-за таких ошибок))

Denis
26.04.2017
13:38:54
но это выглядит как костыль))
И крякает как костыль)) Да, раньше такие вещи решались через loop с обработкой исключений и отправкой на новый круг...

по поводу того что индексы ничего не знают про версионность, на сколько мне помнится, то в индексы добавляются ссылки на новые кортежи, после чего для всех последующих транзакций эти ссылки являются актуальными. Подозреваю, что наиболее верный ответ найду в исходниках, но пока нет времени туда залезть, поэтому в первую очередь надежда на тех, кто это может быть уже искал там:-)
Кстати, я вот прочитал и задумался. Сколь я помню, ссылки на кортежи сразу заносятся в индекс. После этого, когда мы ищем строку в индексе мы получаем список ссылок, прогоняем их через карту видимости таблицы. Те ссылки на кортежи, которые не заморожены (то есть видны не для всех) перепроверяются в таблице с учётом идентификатора транзакции. Но при такой схеме все данные всех транзакций должны по комитету попадать в индекс, иначе как они там окажутся?

Артур
26.04.2017
14:44:18
Вопрос. Есть данные user_id | unique_code 12 | NULL 13 | 2572 14 | 1640 15 | NULL Можно как-то сделать уникальный индекс колонки unique_code игнорируя NULL?

Сергей
26.04.2017
14:45:02
по умолчанию NULL и так игнориуется

Google
Mike Chuguniy
26.04.2017
14:49:22
CREATE UNIQUE INDEX tablename_idx ON tablename (unique_code) WHERE NOT unique_code IS NULL;

Артур
26.04.2017
14:49:25
Хм.. странно. Спасибо. Видимо ошибку допустил какую вчера, потому что сопротивлялся делать уникальным

У меня как раз есть составные уникальные индексы

Alex
26.04.2017
16:09:33
Игорь спасибо я его и выбрал после консультации с Валентином Гогичаишвили

Артур
26.04.2017
20:34:16
Как ФИАС импортировать в postgres?

Alex
26.04.2017
20:34:58
Написать парсер который в нужном вам виде вставит в бд

Артур
26.04.2017
20:35:33
Это как самый крайний вариант я тоже рассматриваю

Но всеже может есть что-то готовое?

Alex
26.04.2017
20:35:51
Там парсер писать 30 минут

Darafei
26.04.2017
20:36:05
https://github.com/Scondo/fiosm

Lev
26.04.2017
20:36:46
сорри, промахнулся :(

Alex
26.04.2017
20:36:48
Прикольно

Lev
26.04.2017
20:36:55
https://github.com/asyncee/fias2pgsql

Артур
26.04.2017
20:40:00
Вообще я всем этим геммороем мучаюсь чтобы получить список улиц города

Darafei
26.04.2017
20:41:09
а зачем тебе список улиц города?

просто осм не подойдёт? :)

Lev
26.04.2017
20:41:28
Вообще я всем этим геммороем мучаюсь чтобы получить список улиц города
а список нужен, чтобы сделать ввод адреса пользователем, или просто так, интересу для?

Артур
26.04.2017
20:42:29
как одно из применений: Поступающие данные валидировать хранимкой

Google
Darafei
26.04.2017
20:43:19
ой, это что-то страшное

Lev
26.04.2017
20:43:31
Артур
26.04.2017
20:43:32
Приходят ~100 000 адресов по дисконткам, нужно провалидировать.

Darafei
26.04.2017
20:43:51
это так делают места, в которые нельзя свой адрес вбить, если его забыли в каком-то реестре? :)

нужно провалидировать - пробей геокодером и посмотри, чтобы у всех accuracy: rooftop было

Артур
26.04.2017
20:44:43
это так делают места, в которые нельзя свой адрес вбить, если его забыли в каком-то реестре? :)
Это так делают, когда люид сказали мне сделать форму, в которую они будут XML Отправлять с информацией о дисконтках, а я это на карте вывести должен с тепловой картой

Darafei
26.04.2017
20:45:08
так тем более зачем список улиц

прямой геокодинг и в путь :)

Артур
26.04.2017
20:46:02
100 000 запросов (+/-50000) будет жрать зараз?

Или пошлёт?

Darafei
26.04.2017
20:46:59
весь осмовский стек поднимается локально

Артур
26.04.2017
20:48:04
Сейчас задам вопрос без сарказма. Только для того чтобы понять что правильно понял. Поднять OSM на тойже машине. Стучаться к геокоодеру Правильно?

Darafei
26.04.2017
20:48:18
https://wiki.openstreetmap.org/wiki/Nominatim/Installation

поднять геокодер на своей машине

залить в него osm

стучаться локально

Артур
26.04.2017
20:49:25
Спасибо

Darafei
26.04.2017
20:49:48
в зависимости от качества нормализации исходнях данных может оказаться, что тебе не нужен весь полный nominatim, а хватит osm2pgsql и селектов по таблице домов с addr:street= addr:housenumber=

вырезки по СНГ живут тут: http://gis-lab.info/projects/osm_dump/

Google
/dev/null
27.04.2017
04:17:23
утра всем

Есть таблица со следующими полями fam | name | lastname | fioподскажите, как можно в поле fio автоматически записывать значения из полей fam name lastname.

Denis
27.04.2017
04:20:31
Admin
ERROR: S client not available

/dev/null
27.04.2017
04:21:02
Denis
27.04.2017
04:22:33
Через полчасика можно, как сам с обеда приду)

/dev/null
27.04.2017
04:23:38
)

Denis
27.04.2017
04:54:07
create table person(id serial, fam text, name text, lastname text, fio text); create or replace function person_fio_tr() returns trigger as $$ begin if (tg_op in ('INSERT','UPDATE')) then new.fio := coalesce(new.fam,'')||' '||coalesce(new.name,'')||' '||coalesce(new.lastname,''); return new; end if; exception when others then raise exception '%', sqlerrm; end; $$ language plpgsql; create trigger person_tr before insert or update on person for each row execute procedure person_fio_tr(); insert into person (fam, name, lastname) values ('курт','кобейн','донольдович'); select * from person;

Nikolay
27.04.2017
05:18:32
http://rhaas.blogspot.ru/2017/04/who-contributes-to-postgresql.html?m=1

Maxim
27.04.2017
07:24:36
коллеги, подскажите, а что обычно делают в такой ситуации:

# select count(*) from pg_locks; count -------- 126066 (1 row)

оно внезапно прыгает с 30к до 100к за секунду

при этом мастер холодный, а на слейве LA >= 60

Denis
27.04.2017
07:34:34
А чем занят слейв судя по логам?

Maxim
27.04.2017
07:35:05
там есть селекты, но их процентов 15-20 от общего числа

он больше для фейловера

Denis
27.04.2017
07:39:12
Ладно, а на что происходит в pg_locks? Я имею ввиду не про количество, а какие таблицы и чем заблокированы? Там есть что-то необычное?

Maxim
27.04.2017
08:04:23
апдейтами заблокированы

причем там апдейты точечные

Google
Maxim
27.04.2017
08:05:25
ну то есть UPDATE "social_accounts" SET "token" = ... WHERE "social_accounts"."id" = 32277

интересно, что на 200 апдейтов айдишников всего три штуки

Denis
27.04.2017
08:11:10
По идее все транзакции, которые проигрываются на мастере, через Wal отправляются один в один на слейв, где проигрываются. По идее, все то же самое происходило на мастере, но при этом мастер не нагружен... хорошо, а в логах мастера похожие апдейты происходили в этот момент?

Maxim
27.04.2017
08:13:01
это на мастере и происходит

а слейв ждет, пока мастер транзакции закроет

потому и подогревается

ну, как я понимаю

Denis
27.04.2017
08:16:37
А репликация синхронная, как я понимаю. Мне кажется надо или делать асинхронную , или разбираться, почему так странно пишется в мастер.

Я бы начал со второго пункта

Fedor
27.04.2017
08:17:00
Смотрел оставание реплики от мастера в это время ?

Maxim
27.04.2017
08:19:11
ну возможно зависит от того, как именно смотреть

вот так его какбэ нет:

# select now() - pg_last_xact_replay_timestamp(); -[ RECORD 1 ]------------- ?column? | 00:00:00.032114

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