@pgsql

Страница 400 из 1062
Victor
13.07.2017
10:50:55
решать естественно можно разными способами

Mike
13.07.2017
10:52:19
pgadmin или ems sql manager
pgadmin скорее

raksita
13.07.2017
10:53:18
pgadmin скорее
для отладки в pgadmin надо сервер настраивать, для ems manager не нужно, но он платный

Google
Mike Chuguniy
13.07.2017
10:54:57
Был баг в версии 9.2, когда строки дублировались даже при наличии уникального индекса. Вот это была задачка )
Это вот вопрос, как возникают такие записи. MVCC, видимость строки, снимки, ну и вот это фсйо...

Айтуар
13.07.2017
11:01:45
Это вот вопрос, как возникают такие записи. MVCC, видимость строки, снимки, ну и вот это фсйо...
А ещё админ плохой в регионе, который держит бд и приложение на одном серваке. И когда приложение кушает чуть больше памяти бд падает. И он не собирается это менять.

Вот причина дублей

Victor
13.07.2017
11:05:24
есть доступ до alter table?
есть полный доступ к бд если это интересует

и да, как вариант - завести столбец с индексом, но это показывает что человек не знает про ctid

вообще правильного ответа нет, просто смотрят какие способы человек предлагает

Артур
13.07.2017
11:08:15
ну я бы (при текущих знаниях): а) создал бы доп поле (например unique_ID) в таблице с foreign на PK той же таблицы б) написал бы Проуедуру (или UPDATE если получится) на определение дубликатов(group by по правилам) и обновление поля uique_ID

потом всё это проанализировал бы и тогда уже делал выводы, можно что- то объединять или нет

Хотя полные дубликаты - это идентичные записи же.

Google
Victor
13.07.2017
11:12:10
ctid - хм... это же что-то по поподу версий строки. Я не прав?
да, можно использовать как уникальный системный индекс при удалении, только автовакуум не забыть отключить

Артур
13.07.2017
11:12:49
хотя нет в обоих случаях так сделал бы. Можно ще конечно сделать абсолютную копию таблицы с добавленным уникальным индексом и добавлять по правилу INSERT ON CONFLICT DO NOTHING

Но меня больше беспокоит PK

А если он где-то связан?

тогда бездумно собирать дубли нельзя и перегонять из таблицы в таблицу не получится

Victor
13.07.2017
11:21:34
Ну пока такой в общем вариант при "сомнительной" уникальности, когда не уверен что все верно соберется
вариантов много, можно тупо сделать дамп таблицы и восстановить уже без дублей

Артур
13.07.2017
11:22:21
Есть ещё хитрый вариант ? Заюзать запросы в PG, а обработку написать на бэкенде :)

Sirojiddin
13.07.2017
11:28:05
Спасива вам мне запис dbf??

Igor
13.07.2017
11:39:35
Ребят, подскажите пожалуйста в каком направлении двигаться из таблицы повытягивать записи с максимальным Value, сгруппированные по external_id, сравнивая только те значения, в которых timestamp'ы не старее от самой верхней(новой) записи в текущей группе по времени чем на 30 дней external_id value timestamp ------------- ------- ------------------- 1 10 2016-10-01 1 5 2016-09-01 3 8 2016-10-01 3 10 2016-09-01 3 12 2016-08-01в итоге что бы из этой таблицы вышло external_id value timestamp ------------- ------- ------------------- 1 10 2016-10-01 3 10 2016-09-01

Igor
13.07.2017
11:41:53
select external_id, max(value), max(timestamp) from table group by external_id having timestamp >= ...; не? а, не, сорри

Ilya
13.07.2017
11:42:23
Там логика чет больно сложная

Igor
13.07.2017
11:43:03
целый день думаю

важно что бы от самой новой записи в группе не больше 30 дней прошло, только тогда эти значения можно сравнивать

Артур
13.07.2017
11:50:30
а если вложенный запрос написать

?

Denis
13.07.2017
11:51:55
Оконные функции вам должны помочь

Артур
13.07.2017
11:51:58
select external_id, max(value), max(timestamp) from table group by external_id having timestamp >= ...; не? а, не, сорри
то есть сначала вычислить самые верхние как здесь написано. А в запросе выше - оринетироваться на значения этой таблицы

Google
Артур
13.07.2017
11:55:21
ну как бы да. 1 сек

точнее час

я сию минуту не смогу протестировать и написать. Но суть такая, сначала выбрать все верхние значения, потом эту выборку связать с таблицей используя значения в качестве условий

Andrey
13.07.2017
12:13:08
create table test as select (random()*5)::int as external_id, (random()*100)::int as value, '2017-01-01'::date + interval '1 day' * (random()*355)::int as "timestamp" from generate_series(1, 1000) t; with prepared as ( select external_id, value, "timestamp", max("timestamp") over(partition by external_id) - interval '30 days' as max_timestamp from test group by external_id, value, "timestamp" ) select external_id, max(value) from prepared where "timestamp" > max_timestamp group by 1;

Если я правильно понял условие.

Igor
13.07.2017
12:21:04
Мне кажется да, секунду, я попробую, но в любом случае спасибо за потраченное время

Denis
13.07.2017
12:38:37
with test (external_id, value, timestamp) as ( values (1,10,'2016-10-01'::timestamp), (1,5,'2016-09-01'::timestamp), (3,8,'2016-10-01'::timestamp), (3,10,'2016-09-01'::timestamp), (3,12,'2016-08-01'::timestamp) ), max_stamp as ( select external_id, max(timestamp) as timestamp from test group by external_id ), max_value as ( select r.external_id, max(r.value) as value from ( select t.external_id, t.value from test as t join max_stamp as g using (external_id) where t.timestamp between (g.timestamp - interval '30 days') and g.timestamp ) as r group by r.external_id ) select external_id, value, timestamp from test where (external_id, value) = any ( select external_id, value from max_value );

Masha
13.07.2017
13:54:06
Уважаемые программисты, подскажите, где можно найти dba postgres и программист тыщ так за 160-180? И чтоб на удаленку не сбежал? Такие существуют?

Darafei
13.07.2017
13:54:33
а dba postgres или программист?

Masha
13.07.2017
13:54:59
2 вакансии, не могу закрыть

Masha
13.07.2017
13:55:17
Москва, Калужская

عاصم بن حارث
13.07.2017
13:55:36
Москва, Калужская
какие ограничения по вакансии?

Andrey
13.07.2017
13:56:05
Манго )

Maks
13.07.2017
13:56:23
"хочу всё и сразу"

Masha
13.07.2017
13:56:34
Ну, полагаю, только 18+))). Главное для dba, чтоб администрировал постгрес.

عاصم بن حارث
13.07.2017
13:56:41
Masha
13.07.2017
13:56:58
Ага, Андрей, Манго. На хх мало спецов, их вообще мало

عاصم بن حارث
13.07.2017
13:57:50
Ну, полагаю, только 18+))). Главное для dba, чтоб администрировал постгрес.
на описание "хотелок" от нанимателя посмотреть можно?

Fike
13.07.2017
13:58:13
Приложите ссылки на сами вакансии с хх.ру, пожалуйста

Google
Mike Chuguniy
13.07.2017
14:04:00
В манго найти адекватного человека, и чтобы не сбежал? Я хочу это видеть!

Пару лет назад отправлял им резюм, получил отлуп. Полез в интернеты читать, что за компания. Порадовался, что получил отлуп.

Сергей
13.07.2017
14:08:09
а че за манго?

Fike
13.07.2017
14:08:29
очевидно https://www.mango-office.ru/

Masha
13.07.2017
14:11:19
Блин, вот вы шустрые, мои запросы медленно работают))). Оптимизация нужна))). Https://hh.ru/vacancy/20608668

Сейчас вторую скину.

Евгений
13.07.2017
14:13:20
Всем привет! Подскажите пожалуйста как разрулить ситуацию с разворачиванием json по колонкам Исходные данные такие: CREATE TYPE mkey AS ( mtype int4, mid int4 ); CREATE TABLE tbl ( field_1 varchar, field_2 int4, mkeys json ); INSERT INTO tbl VALUES (1,1,'[{"mtype":1, "mid":11},{"mtype":1, "mid":22}]'::json); —------------------- Нужно получить строки таблицы "сJOINненые"" со значениями массива из колонки mkeys::json Те нужно получить вот так: field_1 | field_2 | mtype | mid —-------+---------+-------+---— 1 | 1 | 1 | 11 1 | 1 | 1 | 22 Пробую: SELECT * FROM tbl a LEFT JOIN json_array_elements(a.mkeys) ON TRUE; field_1 | field_2 | mkeys | value —-------+---------+-----------------------------------------------+---------------------— 1 | 1 | [{"mtype":1, "mid":11},{"mtype":1, "mid":22}] | {"mtype":1, "mid":11} 1 | 1 | [{"mtype":1, "mid":11},{"mtype":1, "mid":22}] | {"mtype":1, "mid":22} Далее пробую "разложить" по колонкам SELECT * FROM tbl a LEFT JOIN json_populate_record(null::mkey, json_array_elements(a.mkeys)) ON TRUE; но получаю ошибку ( [Err] ERROR: set-valued function called in context that cannot accept a set

Admin
ERROR: S client not available

Masha
13.07.2017
14:14:24
Черт, вакансии dba нет в открытом доступе. Кому интересно, напишите в личку почту, скину. Обещаю никогда не спамить. Спасибо)))

raksita
13.07.2017
14:20:15
Евгений
13.07.2017
14:24:09
сделайте сначала cte с отдельным set из json_array_elements, потом уже выборку с populate
Спасибо, но не совсем понятно что нужно сделать )

raksita
13.07.2017
14:24:37
Евгений
13.07.2017
14:24:54
raksita
13.07.2017
14:36:10
спасибо
немного напутал, в вашем случае можно через recordset: WITH tbl (field1, field2, mkeys) AS (VALUES ('1', 1,'[{"mtype":1, "mid":11},{"mtype":1, "mid":22}]'::JSON)) SELECT tbl.field1, tbl.field2, r.* FROM tbl, json_to_recordset (tbl.mkeys) AS r (mtype INT, mid INT)

raksita
13.07.2017
14:42:25
это работает! еще раз спасибо
или json_populate_recordset (null::mkey, mkeys) вместо json_to_recordset (mkeys) AS ...

Dmitry
13.07.2017
15:22:32
привет, а никто не знает как pg large object хранит? в relation также? https://momjian.us/main/writings/pgsql/aw_pgsql_book/node95.html

в смысле если я создам table (name CHAR(30), image OID) для image будет использоваться один толстый relation как toast?

да с сжатием, как toast

Pavel
13.07.2017
15:40:53
да с сжатием, как toast
Точно? ПО-моему внешние файлы... могу ошибаться, но все же

Google
Pavel
13.07.2017
15:41:12
Именно поэтому и bytea vs oid

Bogdan (SirEdvin)
13.07.2017
15:41:51
Хм .. а можно кто подсказать, можно как-то выяснить реальное количество памяти, которое использует postgres?

Dmitry
13.07.2017
15:42:16
Точно? ПО-моему внешние файлы... могу ошибаться, но все же
postgres=# INSERT INTO data VALUES ('big', lo_import('/test.file.big')); INSERT 0 1 postgres=# INSERT INTO data VALUES ('big2', lo_import('/test.file.big')); INSERT 0 1 postgres=# /test.file.big - 1Gb который хорошо жметься postgres=# INSERT INTO data VALUES ('big3', lo_import('/test.file.big')); INSERT 0 1 postgres=# postgres=# INSERT INTO data VALUES ('big4', lo_import('/test.file.big')); INSERT 0 1 postgres=# postgres=# INSERT INTO data VALUES ('big5', lo_import('/test.file.big')); INSERT 0 1 postgres=# postgres=# INSERT INTO data VALUES ('big6', lo_import('/test.file.big')); INSERT 0 1 postgres=# [root@localhost ~]# ls -lah /var/lib/pgsql/9.6/data/base/13275/2613* -rw-------. 1 postgres postgres 1.0G Jul 13 08:40 /var/lib/pgsql/9.6/data/base/13275/2613 -rw-------. 1 postgres postgres 421M Jul 13 08:42 /var/lib/pgsql/9.6/data/base/13275/2613.1 -rw-------. 1 postgres postgres 384K Jul 13 08:42 /var/lib/pgsql/9.6/data/base/13275/2613_fsm -rw-------. 1 postgres postgres 0 Jul 13 08:29 /var/lib/pgsql/9.6/data/base/13275/2613_vm

Dmitry
13.07.2017
15:43:35
но жмет

накой

кто просил

Pavel
13.07.2017
15:44:13
кто просил
Че, правда жмет? Однако

Dmitry
13.07.2017
15:45:35
он наверно про разделяемую беспокоиться

Bogdan (SirEdvin)
13.07.2017
15:47:47
а вы для чего спрашиваете? беспокоит "большой" чекпоинтер?
Я довольно слабо знаком с системой логики работы памяти в линуксе, а у нас тут возникли проблемки. Вот у меня вроде реальной памяти 32Г, а Commit Limit всего 19 и не могу понять, куда делать остальная память) Пока предполагаю, что все укатилось в shared + mapped, но фиг его знает. Ну и интересно, как понять, сколько всего постгрес сьел.

Dmitry
13.07.2017
15:48:55
Да, не файлы, но и не TOAST. В pg_largeobject хранится
угу, отвратительно, это один relation в котором все lo храняться

хотел бы побить на кучку не гиганстких relation

Да, не файлы, но и не TOAST. В pg_largeobject хранится
postgres=# \d+ pg_largeobject Table "pg_catalog.pg_largeobject" Column | Type | Modifiers | Storage | Stats target | Description —------+---------+-----------+----------+--------------+------------- loid | oid | not null | plain | | pageno | integer | not null | plain | | data | bytea | not null | extended | | Indexes: "pg_largeobject_loid_pn_index" UNIQUE, btree (loid, pageno) блин, тотже bytea

Bogdan (SirEdvin)
13.07.2017
15:55:09
а покажите /proc/meminfo ?
https://pastebin.com/3tNa236H

Dmitry
13.07.2017
16:06:26
https://pastebin.com/3tNa236H
»> (6489688.0 * 1024) / 1024 / 1024 / 1024 6.1890487670898438 6Gb shared buffers

остальное - обычная выделенная память, которую можно посчитать по процессам

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