
Alex
10.10.2018
22:29:38
хочу чтобы был балансинг между нодами на чтение и запись в одну ноду

Vitaly
10.10.2018
22:40:19

Alex
10.10.2018
22:41:31
ок, всем спасибо за ответы

Mike Chuguniy
11.10.2018
02:23:12

Google

Mike Chuguniy
11.10.2018
02:32:10
Реплики синхронные, внедрение хранимок невозможно
Про внедрение - это вот зря.
1. скорость выполнения запросов не падает, а может увеличиться;
2. балансировка как горизонтальная, так и разбиение на чтение/запись с помощью plproxy без дополнительного рукоблудия с двумя коннекторами в приложении.
О разделении нагрузки на чтение и на чтение/запись - это вот первая мысль у меня в своё время была, когда я доку по plproxy читал. Ну и Космодемьяский в своё время рассказывал разное. Только вот я не помню, в кулуарах митапа в Яндексе, сентябрь 2014-го, или где-то в докладах, не спрашивайте.

Usagi
11.10.2018
04:20:20
Получается, лучше использовать MySQL Percona если к задаче это подходит?
Прост я всегда топил за Postgres, не смотря ни на что)

Maxim ??
11.10.2018
04:24:42

Alex
11.10.2018
05:23:17

Aleksander
11.10.2018
05:26:38
Всем привет. Почему данная функция не хочет работать и ругается на поля с типом char
ERROR: column "fam" is of type character[] but expression is of type text
LINE 11: substr(upper(md5(random()::char)),1,30),
^
HINT: You will need to rewrite or cast the expression.
QUERY: insert into markcontrol.test_table
(id,
fam,
nam,
otc,
drg,
sn,
nomer)
values
(nextval('markcontrol.seq_test'),
substr(upper(md5(random()::char)),1,30),
substr(upper(md5(random()::char)),1,30),
substr(upper(md5(random()::char)),1,30),
current_date,
substr(upper(md5(random()::char)),1,2),
trunc(random()*999999999999))

Maxim ??
11.10.2018
05:27:05
по моему он русским языком тебе говорит

Aleksander
11.10.2018
05:27:59

Maxim ??
11.10.2018
05:29:55
добавь к значению, которые в "fam" попадут ::varchar

Aleksander
11.10.2018
05:30:57

Maxim ??
11.10.2018
05:31:32
ну тебе либо в таблице fam надо на text поменять, либо в запросе кастовать

Aleksander
11.10.2018
05:32:09

Darafei
11.10.2018
05:33:20
character[] - это массив символов, кто его вообще зачем написал?

Google

Maxim ??
11.10.2018
05:33:27
Разница только в том, что у варчара есть заранее заданное ограничение на длину, а у текста нет.

Aleksander
11.10.2018
05:42:17
А как в этом цикле промежуточный комит поставить через каждые 100 записей?
begin
for i in 1..1000000 loop
insert into markcontrol.test_table
(id,
fam,
nam,
otc,
drg,
sn,
nomer)
values
(nextval('markcontrol.seq_test'),
substr(upper(md5(random()::text)),1,30),
substr(upper(md5(random()::text)),1,30),
substr(upper(md5(random()::text)),1,30),
current_date,
substr(upper(md5(random()::text)),1,2),
trunc(random()*999999999999)
);
end loop;
end;


Andrey
11.10.2018
05:43:04
А как в этом цикле промежуточный комит поставить через каждые 100 записей?
begin
for i in 1..1000000 loop
insert into markcontrol.test_table
(id,
fam,
nam,
otc,
drg,
sn,
nomer)
values
(nextval('markcontrol.seq_test'),
substr(upper(md5(random()::text)),1,30),
substr(upper(md5(random()::text)),1,30),
substr(upper(md5(random()::text)),1,30),
current_date,
substr(upper(md5(random()::text)),1,2),
trunc(random()*999999999999)
);
end loop;
end;
Никак. Только автономную транзакцию придумать.
Процедуры и анонимные блоки всегда одной транзакцией выполняются, увы.

Aleksander
11.10.2018
05:44:27
простую тестовую операцию в цикле чтобы написать столько мучаюсь. А как вообще посоветуете нагенерить рандомных записей в 1 миллиард штук?

Darafei
11.10.2018
05:46:27
generate_series?
и create table as, зачем там вообще pl?

Maxim ??
11.10.2018
05:48:15

Aleksander
11.10.2018
05:49:55

Darafei
11.10.2018
05:50:20
generate_series()::text ?

Andrey
11.10.2018
05:50:38

Maxim ??
11.10.2018
05:51:16

Darafei
11.10.2018
05:52:06
ещё можно не звать руками nextval

Aleksander
11.10.2018
05:52:14
generate_series()::text ?
мне нужно сгенерить 30 позиций рандомных букв и цифр в одной строчке и таких строчек должно быть 1млн

Let Eat
11.10.2018
05:52:37

Darafei
11.10.2018
05:53:08

Maxim ??
11.10.2018
05:53:17

Aleksander
11.10.2018
05:54:11

Darafei
11.10.2018
05:54:23

Google

Aleksander
11.10.2018
05:54:51
yf rjk dj fhuevtynjd
на кол-во аргументов

Darafei
11.10.2018
05:56:03
попробуйте прочитать документацию на функции в выражении и решить, каких аргументов не хватает

Andrey
11.10.2018
05:56:34
Ругается
Кстати, на postgresql.org есть документация по всем функциям postgres, с примерами. Ну это я так, на всякий случай.

Darafei
11.10.2018
05:56:40
например, тут: https://www.postgresql.org/docs/10/static/functions-srf.html

Aleksander
11.10.2018
06:09:04
Не могу понять теперь как поле даты нагенерить ???
ФИО есть
select s,
substr(upper(md5(s::text)::text),1,30)fam,
substr(upper(md5(s::text)::text),1,30)nam,
substr(upper(md5(s::text)::text),1,30)otc,
trunc((random()*999999999999)::numeric)nomer
from generate_series(1,100) s

Ilya
11.10.2018
06:09:22
подскажите в чем ошибка: я програмно открываю соединение и устанавливаю set search_path to my_schema. все работает как ожидалось, но если начата транзакция и в этот момент идет из другой точки вставка в базу то вставка происходит в public а не в мою схему

Darafei
11.10.2018
06:09:53
Не могу понять теперь как поле даты нагенерить ???
ФИО есть
select s,
substr(upper(md5(s::text)::text),1,30)fam,
substr(upper(md5(s::text)::text),1,30)nam,
substr(upper(md5(s::text)::text),1,30)otc,
trunc((random()*999999999999)::numeric)nomer
from generate_series(1,100) s
нагенери unix time

Maxim ??
11.10.2018
06:10:29

Ilya
11.10.2018
06:10:44
это тесты(

Andrey
11.10.2018
06:11:08
Не могу понять теперь как поле даты нагенерить ???
ФИО есть
select s,
substr(upper(md5(s::text)::text),1,30)fam,
substr(upper(md5(s::text)::text),1,30)nam,
substr(upper(md5(s::text)::text),1,30)otc,
trunc((random()*999999999999)::numeric)nomer
from generate_series(1,100) s
Например, так:
select '2018-01-01'::date + interval '1 day' * (random()*365)::int from generate_series(1, 1000);

Ilya
11.10.2018
06:11:13
то есть я вызываю функции с ормом

Maxim ??
11.10.2018
06:14:54

Aleksander
11.10.2018
06:15:19

Darafei
11.10.2018
06:15:33

Aleksander
11.10.2018
06:15:51
ну типо trunc() есть?

Yaroslav
11.10.2018
06:19:30

Ilya
11.10.2018
06:19:50

Eugeny
11.10.2018
06:20:02

Ilya
11.10.2018
06:20:36
видимо орм если видит начатую транзакцию открывает новую сессию а там дефолт

Google

Ilya
11.10.2018
06:21:27
наверное правильно будет засунуть этот инсерт в транзакцию? как считаете - с точки зрения производительности?

Yaroslav
11.10.2018
06:21:35

Ilya
11.10.2018
06:22:29
ну точнее не проблема а он так решает задачу производительности - раз есть транзакция то не будем ждать...

Yaroslav
11.10.2018
06:25:45

Mike Chuguniy
11.10.2018
06:27:19

Ilya
11.10.2018
06:28:48
а если в двух сессиях конкурентные транзакции - то опять же это проблема не орма а автора кода
оно и без орма дедлочить будет