@pgsql

Страница 118 из 1062
Darafei
12.10.2016
12:16:24
ну и это всё в while true; do ... &; sleep 1 &; wait; done завёрнуто и в скрине крутится

правда, недавно этот костыль таки переписали в цельный микросервис

Slava
12.10.2016
12:17:52
оно того реально стоит?

Google
Slava
12.10.2016
12:17:59
мне кажется большой оверхед по времени

Darafei
12.10.2016
12:18:00
кто и чего?

Slava
12.10.2016
12:18:05
ради того, чтобы уйти от питона

все приседания вот эти

по сути можно на питоне сдампить все, что нужно без гемороя

Darafei
12.10.2016
12:20:50
в том месте питона и не было

Slava
12.10.2016
12:21:31
если я правильно понимаю, данные с монги дергались для того, чтобы потом залить в постгрес?

Yury
12.10.2016
12:23:45
я за питон3!

Alibek
12.10.2016
12:30:53
а в чём глобальная разница в cat | psql copy и copy from '/...'?
Например в потреблении ОЗУ при большом кол-ве операций.

Darafei
12.10.2016
12:31:23
если я правильно понимаю, данные с монги дергались для того, чтобы потом залить в постгрес?
для того, чтобы потом постгисом обработать и сложить в json на fs под nginx

Slava
12.10.2016
12:32:13
Например в потреблении ОЗУ при большом кол-ве операций.
copy from я так понимаю будет производительнее

Darafei
12.10.2016
12:34:21
Например в потреблении ОЗУ при большом кол-ве операций.
окей, кто складывает данные в файлы и почему не может складывать не в файлы, а в базу?

Alibek
12.10.2016
12:34:51
Alibek вы это хотите сделать не костылём, а постоянным элементом системы, что ли? :)
Да это предполагается сделать постоянным элементом системы.

Google
Alibek
12.10.2016
12:36:59
В базу не хочется складывать т.к. тоже куча накладных расходов (запись в wal запись в реплику и т.д. и т.п.). Суть с COPY поднять данные из файла ondemand в tmp табличку (связать промежуточно с запрашиваемыми данными) и спустя время дронуть её.

Darafei
12.10.2016
12:37:57
то есть вы собираетесь рутинно создавать и дропать табличку, и наступить на те же грабли, что и 1С? :)

Roman
12.10.2016
12:38:07
вы можете писать в unlogged таблицу, она не поедет на реплику

насчет copy изнутри процедуры мне решений из коробки не известно, увы

Alibek
12.10.2016
12:40:27
плюс данные которые читаем, писаться должны распределённо.

ну решение-то есть - дать права на superuser, это хоть и несколько менее секьюрно, но приемлемо. Однако по этому поводу возник вопрос и предложение, а почему бы не запилить что-то типа allow copy from

а у вас на чем загрузка в базу?
сейчас это c++ в oracle - и от второго хочется избавиться, и по имеющемуся опыту не хочется это тащить в другую субд.

Alibek
12.10.2016
12:54:10
это тоже допрасходы на ОЗУ при большом кол-ве операций в сравнении с plpgsql...

Darafei
12.10.2016
12:57:21
они любят создавать-дропать темповые таблицы, и в какой-то момент постгресу становится плохо

Alibek
12.10.2016
12:58:24
Что за момент и почему плохо?

Ссылка есть на почитать?

Sergey
12.10.2016
13:08:33
Создавать-tuncate'ить и НЕ дропать.

Где-то после 300000 таблиц становится мало полезной работы и много обслуживания этого треша

Евгений
12.10.2016
13:10:14
а COPY сайты может открывать? :) а т давайте url передадим :)

Darafei
12.10.2016
13:11:53
у амазоновского постгреса, который RedShift, можно с s3:// copy сделать

Евгений
12.10.2016
13:12:35
о ужаз! )

Alibek
12.10.2016
13:24:54
Google
Sergey
12.10.2016
13:25:44
Я не разработчик 1С но думаю резоны такие:

1. Если сессия отсоединится - temp tables всё равно дропнутся. Зачем делать лишние вызовы?

2. А теперь у нас есть 1С-сервер, который держит пул соединений.

Alibek
12.10.2016
13:28:33
1. не про нас - сессия может месяцами жить и изредка отсоединяется т.к. backend. 2. пул в любом случае будет, т.к. несколько backend'ов.

Vadim
12.10.2016
14:23:04
вопрос такой есть, и проблема, в оракле null и '' пустая строка это одно и то же , а в постгресе нет, как-нибудь можно обойти это и сделать такое же поведение как в оракле?

Darafei
12.10.2016
14:24:18
@Cloud66 с какой целью и в каком выражении?

Vadim
12.10.2016
14:25:26
во всех выражениях, для конвертации нужно,чтобы код минимально переделывать

select '' || 'name' select null || 'name'

допустим разный результат возвращают в постгресе, а в оракле одинаковый

Darafei
12.10.2016
14:27:17
coalesce, view с coalesce, alter operator || в не-strict функцию

Vadim
12.10.2016
14:31:26
мы не знаем что именно приходит, и не знаем во что заменять, как оператор работать не знаю, надо понять

Darafei
12.10.2016
14:32:52
просто null непонятно, во что превращать - тебе надо менять поведение операторов с нулл-инпутом

Darafei
12.10.2016
14:33:16
они по умолчанию strict, и выдают null, если на входе есть хоть один null

Vadim
12.10.2016
14:33:36
ага

их поведение можно менять значит

у нас ситуация, приходит либо '' либо null, неизвестно, и определить что пришло, нельзя

Darafei
12.10.2016
14:36:19
coalesce(null,'') на входе всё-таки лучше

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

Vadim
12.10.2016
14:38:50
coalesce(null,'') на входе всё-таки лучше
не подходит такой способ

мы не знаем что у нас приходит, null или '', поэтому любой вход нельзя интерпретировать, то есть либо всегда приходит null, либо всегда приходит ''

Google
Vadim
12.10.2016
14:40:02
потому что ораклу всегда приходит ''

Darafei
12.10.2016
14:40:42
coalesce(вход, '') сделает тебе всегда хотя бы ''

и не null

Vadim
12.10.2016
14:47:31
тогда мы не сможем сделать insert values (null)

а в таблице '' и null, разные значения

хотя с виду одинаковые пустые строчки)

Darafei
12.10.2016
14:49:01
на входе в запрос, в смысле

Vadim
12.10.2016
14:50:39
все запросы переписывать затратно, хотелось бы на уровне бд изменить поведение

Darafei
12.10.2016
14:51:32
ну сделай тогда view :)

Admin
ERROR: S client not available

Vadim
12.10.2016
14:51:41
create temporary table tttt(t text); insert into tttt values (''),(null); select * from tttt where t=''; select * from tttt where t='' or t is null;

не понял пока как вью, на каждый запрос?

Darafei
12.10.2016
14:52:35
а, тебе ещё null='' надо?

Vadim
12.10.2016
14:53:26
видимо это так звучит, я другими словами сказал, надо было так проще

null и '' должно быть одно и тоже как в оракле

Darafei
12.10.2016
14:54:35
тогда как ты их отличишь вставкой в таблицу?

Vadim
12.10.2016
14:55:28
ну вот пример привел, отличаются же, а не должны

Dmitriy
12.10.2016
15:03:11
тогда мы не сможем сделать insert values (null)
обновите все таблицы, запишите туда '' where is null; повесьте триггер на обновление поля, записывайте '' вместо null

это без переделки кода приложения

ну и поставить условие not null на необходимые поля, отслеживайте error log

Google
Vadim
12.10.2016
15:05:16
а конкатенацию строк как делать?

select null || 'name'

Darafei
12.10.2016
15:06:14
после этого действия у тебя не останется нуллов в таблицах

или ты прямо пишешь null || 'name' в запросе?

Vadim
12.10.2016
15:07:28
нет, это переменные связывания конечно

bind

Dmitriy
12.10.2016
15:16:50
а конкатенацию строк как делать?
А в чем проблема? select field || 'name' from table; больше никогда не вернет null

Vadim
12.10.2016
15:20:42
если переделаем встро null в '' конечно да,но тогда запросы where is null будут возвращать неправильный результат

Dmitriy
12.10.2016
15:25:03
то есть все-таки есть ситуации где надо отличать явно is null или ''?

Vadim
12.10.2016
15:25:57
так дело в том что в постгрес они отличаются

в оракле то нет, и не нужно было различать

Dmitriy
12.10.2016
15:26:57
в выборке тоже не отличаются в оракле?

серьезно?

キリル
12.10.2016
15:27:47
серьезно. null и пустая строка '' там одно и то же

Vadim
12.10.2016
15:28:02
да

может наконец будет понятно в чем проблема

キリル
12.10.2016
15:29:52
был у нас такой же кейс, когда редмайн на оракл сажали

как раз вроде триггерами и обошлись

Dmitriy
12.10.2016
15:30:45
for i in $(grep -nRi "is null" -l --include *.php); do echo sed -e "s/is null/''/g" -i $i; done

lol

for i in $(grep -nRi "is null" -l --include *.php| sort|uniq); do sed -e "s/is null/= ''/g" -i $i; done

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