
Volodymyr Kostyrko
13.09.2018
18:19:09
0xFF вчера было.

Anton [Mgn, az09@osm]
13.09.2018
18:21:08
а, сегодня 100

Fike
13.09.2018
18:28:43

Google

Fike
13.09.2018
18:29:38
Легальный ответ на интервью на такой вопрос - это база не должна этим заниматься, тем более что это _крайне_ нетривиальный вопрос. "Использовал postgresql" - это какой язык?


Павел
13.09.2018
18:33:04
Ребят мне нужно задачку решить для оракла но после повторить для постгреса. Поэтому задам для постгреса а там может и для оракла направление увижу. Кароче
Мне одновременно приходят 5 запросов на сервер, каждый в своем потоке. Каждый запрос хочет сходить в базу и вытащить одну строку. Для него там много подходящих, поэтому данные сортируются по дате и берется одна строка самая старая. Дальше запрос формирует ответ из данных строки. Но проблема что второй запрос берет эту же строку с базы и третий тоже. Так как вск 5 хотят ее. Вариант использовать блокировку. Первый запрос блокирует нужную запись. Второй уже ее не возьмет пока первый не отпустит. Но проблема в том, что приходят 5 запросов и делают 5 раз каждый по селекту. А селект всем возвращает сразу одну и ту же строку. Так как пока еще ее никто не успел заблокировать. Может есть какие варинты на уровне базы или ктото решал такие задачи? Я ожилаю так что пришло 5 запросов первый сделал селект и тут же когда второй делает селект он получает следующую строку, а не ту что уже щаблокирована первым, и работает с ней.


Anton [Mgn, az09@osm]
13.09.2018
18:34:15
приложение
блин ну там на входе и на выходе черные ящики (хоть и опенсорсные). речь про osm2pgsql и далее развёртывание тайл-сервера

Vladimir
13.09.2018
18:56:42

Artem
13.09.2018
19:09:54


Михаил
13.09.2018
19:10:08


Павел
13.09.2018
19:10:24

Artem
13.09.2018
19:10:45

Михаил
13.09.2018
19:11:04

Павел
13.09.2018
19:13:10
Ожидается как уже писал - все пять реквестов выплнят по одному селекту. В запросах для наглядности стоит задержка 5 сек, перед коммитом транзакции. Так вот ожидается что 5 запросов выполнят 5 селектов и отработают за 5 сек. По факту же, первый запрос берет строку и начинает работу 5 сек. Тоесть держит ее. Остальные 4 запроса в своем селекте получают эту же строку и так как она залочена отваливаются

Михаил
13.09.2018
19:14:02
Skip locked

Павел
13.09.2018
19:14:09
Да

Михаил
13.09.2018
19:14:29
Хм. Должны пропускать, а не ждать

Google

Павел
13.09.2018
19:14:48
А без него так - первый лочит, 4 ждут 5 сек. Второй берет уже новую строку лочит 3 ждут еще 5 сек и тд. 5 запросов 25 сек
Тоесть до того как первый залочил что не позволило бы остальным ее взять, остальные успеваю ее взять тоже
Ожидается так - первый лочит строку. Второй делает селект и в него попадают тольео не залоченые и лочит свою строку и тд. Но почему то не работает
Скип локед работает так что селект вернет только незалоченые это понятно
Но потоки успевают взять строку одновремеено еще до того как ктото ее залочил
Может есть такая тема типо сразу сделать апдейт который вернет мне зааплейченую строку....

Михаил
13.09.2018
19:21:33
хм, похоже на баг. во всяком случае, не похоже на ожидаемую логику работы select for update. в постгресе не уверен, но в оракле никогда не сталкивался с подобными коллизиями.

Artem
13.09.2018
19:23:40

Павел
13.09.2018
19:23:58

Михаил
13.09.2018
19:25:04

Павел
13.09.2018
19:25:34

Михаил
13.09.2018
19:25:39
из-за этих стадий и образуется gap, если можно так сказать

Павел
13.09.2018
19:27:05
Мнн приходит 50 одинаковых запросов. Например - дай мне данные по васе если есть. Каждый так спрашивает. Я смотрю ок по васе есть 10 записей. На самую старую и иди отсюда.
Второму даю следующую
Осталось 8 третему еще одну

Anton [Mgn, az09@osm]
13.09.2018
19:29:30

Павел
13.09.2018
19:30:21

Google

Anton [Mgn, az09@osm]
13.09.2018
19:31:06

Павел
13.09.2018
19:31:42
Как это загуглить можнт? Может название подхода или стратегии такой есть
Менеджер процедура так и называется?

Anton [Mgn, az09@osm]
13.09.2018
19:32:14
нет конечно, сам только что придумал название
но методологий на свете много, может и поумнее название найдется )

Михаил
13.09.2018
19:34:53
так это ж очереди, в оракле стоит покопать dbms_aq, а в постгресе самостоятельно фигачить

Artem
13.09.2018
19:45:43

Ilya
13.09.2018
19:55:07


Павел
13.09.2018
19:55:33
Вобшем сорян что запутал немного. Уточнение два) кароче селект как я говорил вытаскивает допустим 10 записей и сортирует по дате. После этого я беру первую строку rownum = 1. Но взять ее нужно из уже отсортированного запроса. Поэтому
select a.* from (select b.* from table b where .... order by b.date asc) a where rownum = 1 for update column skip loked.
Тоесть внутренний селект вернул отсортированый список а внешний взял из него первую строку и уже ее пытается лочить. Потом приходит второй поток и делает так же. И ему внутренний селект возвращает такой же набор строк и где первая залочена. Или даже так - все пять потоков делают запрос в котором выполняется внутренний селект и возвращает один набор строк. Они все беруь первую. Потом один лочит ее а остальные крашатся так как рна залочена

Artem
13.09.2018
20:04:58


Михаил
13.09.2018
20:19:31
Что-то мне подсказывает, что limit - не выход. В оракле он, кстати, тоже есть, начиная с 12с

Alexander
13.09.2018
20:19:54
Всегда был - rownum.


Misha
13.09.2018
20:24:28
select * from qq
"1"
1
2
3
declare
rec qq%rowtype;
cursor c is select *
from qq where rowid in (
select * from (select rowid from qq order by 1 desc) where rownum < 10)
for update skip locked;
begin
open c;
fetch c into rec;
close c;
dbms_output.put_line(rec."1");
end;
session 1: 3
session 2: 2
Вобшем сорян что запутал немного. Уточнение два) кароче селект как я говорил вытаскивает допустим 10 записей и сортирует по дате. После этого я беру первую строку rownum = 1. Но взять ее нужно из уже отсортированного запроса. Поэтому
select a.* from (select b.* from table b where .... order by b.date asc) a where rownum = 1 for update column skip loked.
Тоесть внутренний селект вернул отсортированый список а внешний взял из него первую строку и уже ее пытается лочить. Потом приходит второй поток и делает так же. И ему внутренний селект возвращает такой же набор строк и где первая залочена. Или даже так - все пять потоков делают запрос в котором выполняется внутренний селект и возвращает один набор строк. Они все беруь первую. Потом один лочит ее а остальные крашатся так как рна залочена


Darafei
13.09.2018
21:02:11
https://github.com/wgnet/globalmap/blob/master/data/country_languages.csv

Vladimir
13.09.2018
21:42:12
Кто-нибудь пробовал timescale? Как ощущения?

Anton [Mgn, az09@osm]
14.09.2018
03:52:14

Google

Anton [Mgn, az09@osm]
14.09.2018
03:58:26
А как назвать процесс обратный локализации? Интернационализация?..))
Англификация?
Латинизация?
Делокализация?

Nikolai
14.09.2018
03:59:35
Локализация это добавление языка.
Обратное - удаление?

Anton [Mgn, az09@osm]
14.09.2018
04:00:54
Не удаление, скорее попытка преобразовать локальное имя в более интернациональное

Nikolai
14.09.2018
04:02:01
Глобализация?

Kirill
14.09.2018
04:02:10
подскажите, учитывается ли в timstamp поле таймзона бд ?

Anton [Mgn, az09@osm]
14.09.2018
04:03:37
И timestamp without timezone, к тому же.

Yaroslav
14.09.2018
04:08:14

Terminator
14.09.2018
05:00:54
@tfgyuhhygf будет жить. Поприветствуем!

abc
14.09.2018
05:07:59
Всем привет. А можно ли Postgres как-то посмотреть когда был сделан ALTER поля в таблице? Есть такая информация в системных таблицах ?

Yaroslav
14.09.2018
05:19:40

Terminator
14.09.2018
05:39:38
@qewew221 будет жить. Поприветствуем!

Anton [Mgn, az09@osm]
14.09.2018
05:47:38
Сломался терминатор, несите следующего
@pasha_golub @Komzpa

Pavel
14.09.2018
05:48:23

Anton [Mgn, az09@osm]
14.09.2018
05:49:51

Александр
14.09.2018
06:03:20

Михаил
14.09.2018
07:21:44
всем доброго, смотрю у себя вывод коменды в консоли:
pidstat -dl -G postgres 30
на выходе примерно такие строки:
11:03:09 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
11:03:29 70 4466 0,00 0,40 0,00 2 postgres: wal writer process
11:03:29 70 4468 0,00 2,80 0,00 2 postgres: stats collector process
11:03:29 70 6211 0,00 585,80 0,00 0 postgres: postgres data24 [local] SELECT
11:03:29 70 31401 0,00 4761,40 2611,20 13 postgres: postgres data24 [local] SELECT
11:03:29 70 32025 0,00 1306,00 1305,60 3 postgres: postgres data24 [local] idle
Почему и куда-что пишется на селектах и ожиданиях ПГ? Тупо ожидал чтения данных, а тут постоянно запись. Или я ошибаюсь.

artb1sh
14.09.2018
07:43:10
как скопировать таблицу без данных и воссоздать в другой бд такую же пустую?

Pavel
14.09.2018
07:52:25

Google

Pavel
14.09.2018
07:53:12

Михаил
14.09.2018
08:06:54

artb1sh
14.09.2018
08:13:38

Yaroslav
14.09.2018
08:34:04
всем доброго, смотрю у себя вывод коменды в консоли:
pidstat -dl -G postgres 30
на выходе примерно такие строки:
11:03:09 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
11:03:29 70 4466 0,00 0,40 0,00 2 postgres: wal writer process
11:03:29 70 4468 0,00 2,80 0,00 2 postgres: stats collector process
11:03:29 70 6211 0,00 585,80 0,00 0 postgres: postgres data24 [local] SELECT
11:03:29 70 31401 0,00 4761,40 2611,20 13 postgres: postgres data24 [local] SELECT
11:03:29 70 32025 0,00 1306,00 1305,60 3 postgres: postgres data24 [local] idle
Почему и куда-что пишется на селектах и ожиданиях ПГ? Тупо ожидал чтения данных, а тут постоянно запись. Или я ошибаюсь.
Ну а почему бы нет? Hint bits update, например. Или microvacuum. Даже lock-и, в крайнем случае (если SELECT ... FOR SHARE/UPDATE).
Т.е. SELECT-ы могут писать (и иногда даже много).


Михаил
14.09.2018
08:37:22
Схема - это часть базы, к которой вы подключаетесь, никак не часть строки подключения

Darafei
14.09.2018
09:00:45

Alexander
14.09.2018
09:21:55
Привет всем, хочу спросить, может быть кто нить уже сталкивался с подбным.
На одном сервере кpутится сервер 1с и постгрес, при попытке присоединения базы 1с к постгресу появляется ошибка ERROR: type "mvarchar" does not exist at character 31
STATEMENT: create table Config (FileName mvarchar(128) not null, Creation timestamp not null, Modified timestamp not null, Attributes int not null, DataSize int8 not null, BinaryData bytea not null, PartNo int not null, PRIMARY KEY (FileName, PartNo))
Причём расширение/модуль mchar уже установлен


Andrey
14.09.2018
09:25:51
Привет всем, хочу спросить, может быть кто нить уже сталкивался с подбным.
На одном сервере кpутится сервер 1с и постгрес, при попытке присоединения базы 1с к постгресу появляется ошибка ERROR: type "mvarchar" does not exist at character 31
STATEMENT: create table Config (FileName mvarchar(128) not null, Creation timestamp not null, Modified timestamp not null, Attributes int not null, DataSize int8 not null, BinaryData bytea not null, PartNo int not null, PRIMARY KEY (FileName, PartNo))
Причём расширение/модуль mchar уже установлен
Кажется, вам нужно установить модуль mchar.
https://postgrespro.ru/docs/postgrespro/9.6/mchar