Size: a a a

pgsql – PostgreSQL

2021 February 02

SS

Sergii Serogin in pgsql – PostgreSQL
С nullif  в одном из параметров
источник

R

Roman in pgsql – PostgreSQL
Вообще это необходимо, чтобы ссылку на файл формировать через бд, а не яп.
источник

R

Roman in pgsql – PostgreSQL
Igor Chizhov
код покажи
Пробовал по типу case when small_photo = null then null else concat(domain.ru/uploads/, small_photo) end
источник

A

Alex in pgsql – PostgreSQL
Roman
Вообще это необходимо, чтобы ссылку на файл формировать через бд, а не яп.
а зачем?
источник

I

Igor in pgsql – PostgreSQL
select null || 'string' as str;
и так null вернёт
источник

A

Alex in pgsql – PostgreSQL
Roman
Пробовал по типу case when small_photo = null then null else concat(domain.ru/uploads/, small_photo) end
is null
источник

R

Roman in pgsql – PostgreSQL
Alex
а зачем?
Ну в бд лежит только имя файла, домен может измениться. Наверное лучше делать это через бд, чтобы не гонять массивы на серваке
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Igor Chizhov
Их полторы сотни :( И все типичные :) И это без всевозможных фильтров.
Ну так это ничто, если они все известны — выполнить (можно с auto_explain + вытащить планы из лога), просто поискать "развесистые". :)
И "фильтры" могут запросто менять планы.
А можно этим не заморачиваться, просто примерно посчитать, а с появлением реальной нагрузки уже окончательно настроить (если вообще придётся).
источник

IC

Igor Chizhov in pgsql – PostgreSQL
Yaroslav Schekin
Ну так это ничто, если они все известны — выполнить (можно с auto_explain + вытащить планы из лога), просто поискать "развесистые". :)
И "фильтры" могут запросто менять планы.
А можно этим не заморачиваться, просто примерно посчитать, а с появлением реальной нагрузки уже окончательно настроить (если вообще придётся).
Насчет auto_explain не подумал, спасибо )

Фильтры меняют планы на очень хорошие, всё по индексам попадает) Курсоры подгаживают, не дают параллелизм (((
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Roman
Пробовал по типу case when small_photo = null then null else concat(domain.ru/uploads/, small_photo) end
small_phote = NULL — вот так нельзя с NULL, см. https://www.postgresql.org/docs/current/functions-comparison.html

Ordinary comparison operators yield null (signifying “unknown”), not true or false, when either input is null. For example, 7 = NULL yields null, as does 7 <> NULL.

и затем

To check whether a value is or is not null, use the predicates:

expression IS NULL
expression IS NOT NULL
источник

R

Roman in pgsql – PostgreSQL
Victor Yegorov
small_phote = NULL — вот так нельзя с NULL, см. https://www.postgresql.org/docs/current/functions-comparison.html

Ordinary comparison operators yield null (signifying “unknown”), not true or false, when either input is null. For example, 7 = NULL yields null, as does 7 <> NULL.

и затем

To check whether a value is or is not null, use the predicates:

expression IS NULL
expression IS NOT NULL
case when small_photo is null then null else concat('uploads/', small_photo) end
Исправил на такое. Вроде бы работает, выглядит конечно отвратно. Спасибо
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Roman
case when small_photo is null then null else concat('uploads/', small_photo) end
Исправил на такое. Вроде бы работает, выглядит конечно отвратно. Спасибо
тут не нужен CASE WHEN. как выше было сказано в цитате из доков, операции с NULL возвращают NULL.

замените всё выражение на 'uploads/'||small_photo — как уже написали, этого достаточно.
источник

R

Roman in pgsql – PostgreSQL
Victor Yegorov
тут не нужен CASE WHEN. как выше было сказано в цитате из доков, операции с NULL возвращают NULL.

замените всё выражение на 'uploads/'||small_photo — как уже написали, этого достаточно.
Да, действительно работает. Пропустил сообщение, извините. Спасибо большое за помощь
источник

IC

Igor Chizhov in pgsql – PostgreSQL
Но select concat(null, 'test'); вернёт test, так что только ||
источник

VY

Victor Yegorov in pgsql – PostgreSQL
это такое поведение у concat, иногда полезно бывает
источник

VV

Vasily Vologdin in pgsql – PostgreSQL
Привет!
Есть табличка в которую вставляются данные
Нужно поле в котором будет timestamp момента вставки, как это лучше реализовать?
источник

MZ

Michael マイケル Zhilin ... in pgsql – PostgreSQL
Vasily Vologdin
Привет!
Есть табличка в которую вставляются данные
Нужно поле в котором будет timestamp момента вставки, как это лучше реализовать?
В документации (https://www.postgresql.org/docs/current/ddl-default.html):
The default value can be an expression, which will be evaluated whenever the default value is inserted (not when the table is created). A common example is for a timestamp column to have a default of CURRENT_TIMESTAMP, so that it gets set to the time of row insertion.

Или что-то другое требуется?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Vasily Vologdin
Привет!
Есть табличка в которую вставляются данные
Нужно поле в котором будет timestamp момента вставки, как это лучше реализовать?
Как-то так: " created_at timestamptz NOT NULL DEFAULT now()".
источник

VV

Vasily Vologdin in pgsql – PostgreSQL
Michael マイケル Zhilin ジリン
В документации (https://www.postgresql.org/docs/current/ddl-default.html):
The default value can be an expression, which will be evaluated whenever the default value is inserted (not when the table is created). A common example is for a timestamp column to have a default of CURRENT_TIMESTAMP, so that it gets set to the time of row insertion.

Или что-то другое требуется?
Красиво!
благодарю!
источник

К

Константин in pgsql – PostgreSQL
Всем привет, совсем недавно начал работать с postgresql да и с базами данны в принципе. Возник вопрос, над которым сижу уже третий день.

Сразу скажу, что используется схема public.

У меня есть дефолтный юзер postgres и я создаю отдельного пользователя username.
От имени postgres создаю базу данных onlinekassa.

Возникает необходимость ограничить привилегии юзера username, чтобы он не мог делать DELETE и TRUNCATE в таблицах, которые он будет создавать в базе данных onlinekassa.

Читаю про ALTER DEFAULT PRIVILEGES, но там говорится, что REVOKE не будет работать для схемы public, если до этого не было GRANT.

Пробовал все возможные комбинации. Если делать просто REVOKE для имеющихся таблиц, то все работает, но ALTER DEFAULT PRIVILEGES не работает ни при каких условиях
источник