Size: a a a

pgsql – PostgreSQL

2020 August 22

A

Alexander in pgsql – PostgreSQL
Mentat
А это разве не дороже по времени вставки будет в это поле?
источник

M

Mentat in pgsql – PostgreSQL
Благодарю
источник

РЖ

Роман Жарков... in pgsql – PostgreSQL
Alexander Nikitin
А если туда согласно бизнес-правилам запихивать больше нельзя?
Я так поле под номера телефонов - чтоб не соврать - за два года раза три расшиперивал под меняющиеся запросы бизнес-логики.
То ещё удовольствие под нагрузкой DDL-ем таблицу блокировать эксклюзивно.
источник

YD

Yevhen Dmytrenko in pgsql – PostgreSQL
Petr
Тогда в чем разница varchar() и text
Varchar () позволяет тебе максимум использовать длину 255 символов, 4 байта помоему, при этом если ты написал 4/255 то он уменьшит автоматически количество занимаемой памяти до такого значения которое занимает введенное тобой количество символов, если тебе надо больше чем 255 то будь добр используй text, ибо нехуй)
источник

L

LA in pgsql – PostgreSQL
Про varchar знаю, но не вижу для себя выгоды пока что, объем данных такой же, скорость вставки не медленнее text.

По поводу индексов посоветуйте пожалуйста 🙈 там весь пример на пастебин с таблицами, данными и запросами.

Меня очень смущает что на update запросах сложные where - нужно ли индексы там добавить и какие?
И в конце select есть, посоветуйте там как индекс сделать - составной или просто на все столбцы по одному?
источник

L

LA in pgsql – PostgreSQL
LA
есть задача обновить таблицу на 150 млн строк новыми данными из свежей выгрузки, на хабре нашел статью с примерами как это делать силами pg, переделал под себя, теперь хочется понять какие лучше индексы сделать и в какой момент (особенно интересно нужны ли они в тот момент когда делается UPDATE/INSERT, потому что там сложные WHERE)?

Полный пример для воспроизведения выложил тут: https://pastebin.com/2bpcmqAT
Вот тут пастебин
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Yevhen Dmytrenko
Varchar () позволяет тебе максимум использовать длину 255 символов, 4 байта помоему, при этом если ты написал 4/255 то он уменьшит автоматически количество занимаемой памяти до такого значения которое занимает введенное тобой количество символов, если тебе надо больше чем 255 то будь добр используй text, ибо нехуй)
> Varchar () позволяет тебе максимум использовать длину 255 символов

Да нет же.
CREATE TABLE x(
y varchar(1234567)
);
INSERT INTO x(y)
SELECT repeat('a', 100000);

text+CHECK в среднем лучше, чем varchar(N), потому что text — native string type для PostgreSQL, а CHECK позволяет выразить и другие ограничения, кроме "длина <= N".
источник

РА

Романов Александр... in pgsql – PostgreSQL
коллеги, подскажите плиз
есть некий запрос, который привел к kill -9
я знаю что упало что-то что было запущено кроном. что было в запросе  не знаю. он пробегает поо дереву зависимостей задач и выбирает что доступно. т.е. он точно что-то выбрал и начал делать

а потом в логе

2020-08-22 04:13:06.090 MSK [10175]:  user=,db= sid=5f0c41eb.27bf 00000 LOG:  server process (PID 23426) was terminated by signal 9: Killed
2020-08-22 04:13:06.090 MSK [10175]:  user=,db= sid=5f0c41eb.27bf 00000 DETAIL:  Failed process was running: select maintenance.pr_run_job('J3');
2020-08-22 04:13:06.090 MSK [10175]:  user=,db= sid=5f0c41eb.27bf 00000 LOG:  terminating any other active server processes


что хотя бы примерно это могло быть?
источник

D

Dmitriy in pgsql – PostgreSQL
Yevhen Dmytrenko
Varchar () позволяет тебе максимум использовать длину 255 символов, 4 байта помоему, при этом если ты написал 4/255 то он уменьшит автоматически количество занимаемой памяти до такого значения которое занимает введенное тобой количество символов, если тебе надо больше чем 255 то будь добр используй text, ибо нехуй)
255 длинна поля это не 4 байта
источник

L

LA in pgsql – PostgreSQL
Yaroslav Schekin
> Varchar () позволяет тебе максимум использовать длину 255 символов

Да нет же.
CREATE TABLE x(
y varchar(1234567)
);
INSERT INTO x(y)
SELECT repeat('a', 100000);

text+CHECK в среднем лучше, чем varchar(N), потому что text — native string type для PostgreSQL, а CHECK позволяет выразить и другие ограничения, кроме "длина <= N".
вставилось, всё ок
источник

L

LA in pgsql – PostgreSQL
public> CREATE TABLE x(
               y varchar(1234567)
               )
[2020-08-22 11:42:09] completed in 504 ms
public> INSERT INTO x(y)
               SELECT repeat('a', 100000)
[2020-08-22 11:42:15] 1 row affected in 16 ms
источник

L

LA in pgsql – PostgreSQL
select length(y) from x;

100000
источник

L

LA in pgsql – PostgreSQL
я походу просто не понимаю всё таки)
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
LA
я походу просто не понимаю всё таки)
Чего Вы не понимаете? ;)
То, что написал @yevhen_dmytrenko про длину в 255 символов — просто неправда, вот и всё.
источник

L

LA in pgsql – PostgreSQL
Я имею ввиду зачем мне менять varchar(n) на text, я не буду потом менять длину столбца, особенно letter varchar(1), тут вообще не ясен профит от text
источник

2_

2flower _ in pgsql – PostgreSQL
Alex Ilizarov
Чтобы там не появилось гигабайта на поле имя?
для этого вполне есть check
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Романов Александр
коллеги, подскажите плиз
есть некий запрос, который привел к kill -9
я знаю что упало что-то что было запущено кроном. что было в запросе  не знаю. он пробегает поо дереву зависимостей задач и выбирает что доступно. т.е. он точно что-то выбрал и начал делать

а потом в логе

2020-08-22 04:13:06.090 MSK [10175]:  user=,db= sid=5f0c41eb.27bf 00000 LOG:  server process (PID 23426) was terminated by signal 9: Killed
2020-08-22 04:13:06.090 MSK [10175]:  user=,db= sid=5f0c41eb.27bf 00000 DETAIL:  Failed process was running: select maintenance.pr_run_job('J3');
2020-08-22 04:13:06.090 MSK [10175]:  user=,db= sid=5f0c41eb.27bf 00000 LOG:  terminating any other active server processes


что хотя бы примерно это могло быть?
А что значит "привёл к kill -9"? Вы OOM killer имеете в виду?
Если да, это могло быть всё что угодно, в т.ч. "виноват" может быть вообще не PostgreSQL, просто он стал жертвой.
Лучше перенастроить сервер (OS) так, чтобы OOM kills прекратились, если его предназначение — быть сервером именно для postgres.
источник

2_

2flower _ in pgsql – PostgreSQL
LA
Я имею ввиду зачем мне менять varchar(n) на text, я не буду потом менять длину столбца, особенно letter varchar(1), тут вообще не ясен профит от text
тут и не понятно зачем varchar
источник

РА

Романов Александр... in pgsql – PostgreSQL
Yaroslav Schekin
А что значит "привёл к kill -9"? Вы OOM killer имеете в виду?
Если да, это могло быть всё что угодно, в т.ч. "виноват" может быть вообще не PostgreSQL, просто он стал жертвой.
Лучше перенастроить сервер (OS) так, чтобы OOM kills прекратились, если его предназначение — быть сервером именно для postgres.
у меня недостаточно знаний чтобы про OOM killer  ответить
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
LA
Я имею ввиду зачем мне менять varchar(n) на text, я не буду потом менять длину столбца, особенно letter varchar(1), тут вообще не ясен профит от text
Этот вопрос можно задать и наоборот. ;)
И да, в  "letter varchar(1)" можно вставить как пустую строку, так и цифру — это точно правильно?
источник