Size: a a a

pgsql – PostgreSQL

2020 July 24

R

Roman in pgsql – PostgreSQL
Yaroslav Schekin
С char(N) на текст? А Вы просто ALTER COLUMN на тестовой таблице пробовали — может, там перезаписи таблицы и вообще нет (я не помню)?
Есть. С varchar на text можно перейти безболезненно, вроде как, а вот с char..
источник

АЛ

Аггей Лоскутников... in pgsql – PostgreSQL
Вроде как text использует TOAST, а char нет и вряд ли можно изменить тип налету (не уверен в сказанном)
источник

s

sexst in pgsql – PostgreSQL
Yaroslav Schekin
С char(N) на текст? А Вы просто ALTER COLUMN на тестовой таблице пробовали — может, там перезаписи таблицы и вообще нет (я не помню)?
AFAIK без перезаписи, просто дополнительные незначащие пробелы сохранятся и может логика селектов с прямым сравнением значений сломаться. Ну то есть вместо условного char(10) 'a' получим text 'a          '. Поэтому придётся ещё делать rtrim.

Хотя вот пишут что есть перезапись.
В общем, к коллайдеру!!!
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Да, проверил (в v11 и v12) — перезапись действительно есть (может, просто не реализовано; а может, формат хранения char в самом деле отличается, я не помню, опять-таки).
источник

s

sexst in pgsql – PostgreSQL
test=# select t1.typname, t2.typname
from pg_cast, pg_type as t1, pg_type as t2
where
   t1.oid = castsource and t2.oid = casttarget and
   castmethod = 'b' and t1.typname in ('bpchar','varchar','text') order by 1,2 ;
typname | typname
---------+---------
text    | bpchar
text    | varchar
varchar | bpchar
varchar | text
(4 rows)
источник

s

sexst in pgsql – PostgreSQL
Получается что в обратную сторону по идее есть конверсия прямая (бинарная, без применения функций), а в нужную нет.
источник

DA

Daniil Agniashvili in pgsql – PostgreSQL
Всем добрый день
Хочу придумать функцию для поля в бд, в которой можно хранить разные значения
чтобы не было массивом в стиле [1,3,5]
Всего пунктов около 10-20

выше пример не очень, сложно делать поиск, да и это строка (json не особо хорошо юзать в бд)

думал над тем, чтобы сделать в стиле битов
1000000010101
слева ведущий бит. но число будет длинное. как можно укоротить?
хочу чтобы быстро считывало  (вариант с битами хорош тем, что можно деление юзать)
ну и меньше места занимало
источник

s

sexst in pgsql – PostgreSQL
В смысле есть ряд из 10-20 признаков типа 'да'/'нет'  и нужно компактно хранить их для каждой строки?

Или именно массив чисел нужен? Если массив чисел, то они строго уникальны? Если строго уникальны, то порядок важен? Какое максимально возможное число возможно?
источник

s

sexst in pgsql – PostgreSQL
Если флаги и не планируется делать выборки из огромной таблицы по произвольным сочетаниям их значений - можете хранить как bit
источник

s

sexst in pgsql – PostgreSQL
В противном случае я бы сначала крепко подумал над возможными потребующимися в будущем изменениями. С такой реализацией можно в итоге придти к необходимости переделывать всё, включая код.
источник

ЕР

Екатерина Ростова... in pgsql – PostgreSQL
всем добрый день. а не подскажите в чем может быть проблема? и как это можно разрешить?
ОШИБКА: cache lookup failed for operator
источник

ЕР

Екатерина Ростова... in pgsql – PostgreSQL
при удалении сущности всплывает данная ошибка
источник

АЛ

Аггей Лоскутников... in pgsql – PostgreSQL
Daniil Agniashvili
Всем добрый день
Хочу придумать функцию для поля в бд, в которой можно хранить разные значения
чтобы не было массивом в стиле [1,3,5]
Всего пунктов около 10-20

выше пример не очень, сложно делать поиск, да и это строка (json не особо хорошо юзать в бд)

думал над тем, чтобы сделать в стиле битов
1000000010101
слева ведущий бит. но число будет длинное. как можно укоротить?
хочу чтобы быстро считывало  (вариант с битами хорош тем, что можно деление юзать)
ну и меньше места занимало
А можно не в стиле делать, а прям биты.

То есть первый флаг
Максимально заполненные флаги будут тогда
1+2+4+8+16+32 ...


Итого у вас будет хранится 1 число - которое легко развернуть во флаги.

В одном из проектов такое встречал.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Екатерина Ростова
всем добрый день. а не подскажите в чем может быть проблема? и как это можно разрешить?
ОШИБКА: cache lookup failed for operator
Да в чём угодно — достаточных подробностей Вы не привели. :(
Мне кажется, лучше показать конкретные команды (и \d относящихся к делу "сущностей"), и ошибку с максимальной детализацией. И да, какая полная версия PostgreSQL?
источник

ЕР

Екатерина Ростова... in pgsql – PostgreSQL
Yaroslav Schekin
Да в чём угодно — достаточных подробностей Вы не привели. :(
Мне кажется, лучше показать конкретные команды (и \d относящихся к делу "сущностей"), и ошибку с максимальной детализацией. И да, какая полная версия PostgreSQL?
был оператор, который использовал конкретную функцию. я удалила оператор, следом хотела удалить функцию. и всплыла данная ошибка
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Екатерина Ростова
был оператор, который использовал конкретную функцию. я удалила оператор, следом хотела удалить функцию. и всплыла данная ошибка
Показывать надо, не пересказывать. ;)
источник

ЕР

Екатерина Ростова... in pgsql – PostgreSQL
psql (PostgreSQL) 12.2 (Ubuntu 12.2-2.pgdg16.04+1)

версия
источник

АЛ

Аггей Лоскутников... in pgsql – PostgreSQL
Попробуй пересоздать функцию без использования оператора
источник

АЛ

Аггей Лоскутников... in pgsql – PostgreSQL
Потом удали функцию
источник

АЛ

Аггей Лоскутников... in pgsql – PostgreSQL
Или ситуация наоборот?...
источник