Ответы пользователя по тегу PostgreSQL
  • Как ускорить поиск по индексу, где много null?

    @chemdev Автор вопроса
    Для ускорения работы запроса был создан частичный индекс по проблемному столбцу, выглядит так:
    CREATE INDEX "last_modified_user_notnull_idx" ON "my_table" ("last_modified_user_id") WHERE "last_modified_user_id" IS NOT NULL;

    После этого запросы по типу
    SELECT * FROM "my_table" where last_mofied_user_id=x;
    перестали зависать.
    Также в таких ситуациях стоит выполнить VACUUM ANALYZE "my_table";
    Структура таблиц
    CREATE TABLE "user" (
        id INT GENERATED ALWAYS AS IDENTITY,
        PRIMARY KEY(id)
    )
    
    CREATE TABLE "my_table" (
        id bigserial INT GENERATED ALWAYS AS IDENTITY
        last_modfied_user_id int default NULL,
        PRIMARY KEY(id),
        CONSTRAINT fk_last_modified_user FOREIGN KEY(last_modfied_user_id) REFERENCES user(id)
    )

    За помощь в решении выражаю благодарность Everything_is_bad
    Ответ написан
    Комментировать
  • Почему при операциях с БД из под Docker-контейнера возникает ошибка?

    @chemdev
    Если я правильно понял, в контейнере у тебя аирфлоу, а постгрес еще где-то но не в данной докер-сети. Если это так, необходимо либо в cmd, либо в конфиге пробросить порт из докеровской сети наружу.
    Об этом можно почитать здесь
    Проблема связана с тем, что у докера внутри свой локалхост.
    Ответ написан
    1 комментарий
  • Как настроить pg_hub.conf для greenplum?

    @chemdev
    1) Загугли дефолтный файл
    2) Он называется pg_hba.conf
    Ответ написан
    Комментировать
  • Как написать запрос для трёх связанных таблиц (many-to-many)?

    @chemdev
    Формально, если не ошибаюсь, тут нет м2м связи. Есть о2м main => t1 и o2m t1 => t2
    Нужно сделать два лефт джойна и взять уникальные столбцы из таблицы main
    Условие фильтрации можно написать сразу же во втором джоине а можно и в конструкции where.

    SELECT DISTINCT "m"."id" FROM "main_table" AS "m"
        LEFT JOIN "table_1" AS "t1" ON "t1"."main_table_id" = "m"."id"
        LEFT JOIN "table_2" AS "t2" ON "t2"."table_1_id" = "t1"."id"
        AND "t2"."nexessary_column" = 'you string to filter'
    Ответ написан
    Комментировать