Size: a a a

pgsql – PostgreSQL

2020 July 13

s

sexst in pgsql – PostgreSQL
blkmrkt
Есть вот такая любопытная проблема:

CREATE TABLE foo (id int PRIMARY KEY DEFAULT nextval('foo_id_seq'), uniq int UNIQUE NOT NULL);

INSERT INTO foo (id, uniq)
SELECT
 COALESCE((SELECT id FROM foo WHERE uniq = :uniq), nextval('foo_id_seq')),
 :uniq
ON CONFLICT (id) DO UPDATE SET ...;


Что тут правильно указывать в кач-ве ON CONFLICT клаузы? Я склоняюсь к id, шеф считает что uniq будет более правильно. Тут западло в том какая проверка сработает первая (id или uniq), или в чем-то другом?
А, пардон, что вы можете в ON CONFLICT блоке обновить так, чтобы разрешить конфликт уникальности uniq, в свете того факта, что вы это значение, судя по всему, передаёте явно для вставки?
источник

s

sexst in pgsql – PostgreSQL
Перепишете значение uniq? Офигенная логика выходит. Вы вставляете значение "3", а база молча исправляет это на "33" и пишет в таблицу
источник

s

sexst in pgsql – PostgreSQL
Я тут вижу прямо простор для ловли багов.
источник

b

blkmrkt in pgsql – PostgreSQL
sexst
Перепишете значение uniq? Офигенная логика выходит. Вы вставляете значение "3", а база молча исправляет это на "33" и пишет в таблицу
Там чуть более запутано все, но суть та же самая.

У нас помимо id есть generated колонка которая и есть этот самый uniq, она складывается из нескольких значений соседних колонок и хеша.

Правильно будет наверное сделать эту uniq колонку праймари ключом.
источник

b

blkmrkt in pgsql – PostgreSQL
единственное что неприятно это потеря секвенса, но без него наверное можно прожить
источник

s

sexst in pgsql – PostgreSQL
blkmrkt
Там чуть более запутано все, но суть та же самая.

У нас помимо id есть generated колонка которая и есть этот самый uniq, она складывается из нескольких значений соседних колонок и хеша.

Правильно будет наверное сделать эту uniq колонку праймари ключом.
Ну как бы да. Зачем вам fake primary key из последовательности в такой ситуации?
источник

b

blkmrkt in pgsql – PostgreSQL
sexst
Ну как бы да. Зачем вам fake primary key из последовательности в такой ситуации?
Конвенция наверное такая, деды так делали
источник

АК

А К in pgsql – PostgreSQL
Всем Привет! как можно посмотреть какие таблицы в бд к которой я подконектился?
источник

M

Mentat in pgsql – PostgreSQL
А К
Всем Привет! как можно посмотреть какие таблицы в бд к которой я подконектился?
источник

q

quavo in pgsql – PostgreSQL
А К
Всем Привет! как можно посмотреть какие таблицы в бд к которой я подконектился?
\d
источник

АК

А К in pgsql – PostgreSQL
а как это сделать через либу psycopg2?
источник

q

quavo in pgsql – PostgreSQL
А К
а как это сделать через либу psycopg2?
Я думаю, там в документации есть способы
источник

q

quavo in pgsql – PostgreSQL
Ну судя по Гуглу, то надо запрос сделать
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
А К
а как это сделать через либу psycopg2?
Запросить инфу из pg_class: https://www.postgresql.org/docs/11/catalog-pg-class.html
источник

SB

Sergey Bubnov in pgsql – PostgreSQL
Всем привет. Помогите, пожалуйста, составить правильно индексы.
Есть вот такой запрос на скрине и он отрабатывает по индексам достаточно быстро. Но если я добавлю доп условие, то все становится медленно. Пробовал просто отдельно поставить индексы на эти доп поля, но эффекта не дало
источник

SB

Sergey Bubnov in pgsql – PostgreSQL
Вот второй запрос, где условие поиска по тексту trgrm и lower
источник

2_

2flower _ in pgsql – PostgreSQL
Sergey Bubnov
Всем привет. Помогите, пожалуйста, составить правильно индексы.
Есть вот такой запрос на скрине и он отрабатывает по индексам достаточно быстро. Но если я добавлю доп условие, то все становится медленно. Пробовал просто отдельно поставить индексы на эти доп поля, но эффекта не дало
покажите плохой индекс
вам нужны индексы не на поля, а на выражение lower(...)
источник

SB

Sergey Bubnov in pgsql – PostgreSQL
2flower _
покажите плохой индекс
вам нужны индексы не на поля, а на выражение lower(...)
источник

2_

2flower _ in pgsql – PostgreSQL
а где индекс из первого запроса?
источник

SB

Sergey Bubnov in pgsql – PostgreSQL
2flower _
а где индекс из первого запроса?
Вот все индексы что есть
источник