Задать вопрос
Ответы пользователя по тегу PostgreSQL
  • Как часто вы сбрасываете статистику pg_stat_statements?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Мы делаем ежедневный отчёт кроном, после формирования которого вызываем pg_stat_statements_reset. То есть раз в сутки.
    Ответ написан
    Комментировать
  • Binary UUID в Laravel с Postgres?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Прежде чем пытаться изобрести колесо - проверьте штатные возможности. Если вам ну прямо так очень хочется использовать uuid вместо более компактного и быстрого bigint - то такой тип данных уже есть в postgresql.
    Хранится как фиксированной длины поле 16 байт.
    Преобразованием его в bytea вы только увеличите, а не уменьшите его размер. Т.к. для bytea потребуется хранить ещё длину данных в этом поле.

    С постгресом пока что на Вы и не могу понять что он от меня хочет.. Как я понял из интернетов он плохо воспринимает бинарник в UTF'е

    В смысле так и задумано. Если у вас база в utf8, то все текстовые поля намеренно проверяются, чтобы в них было что-то валидное для utf8.
    Ответ написан
    Комментировать
  • Django не происходит migrate как исправить?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    permission denied for schema public

    Кто-то явным образом сделал
    revoke create on schema public from public;
    Это право дефолтное для public схемы, его именно кто-то или что-то намеренно отозвал.

    соответствующий grant
    grant create on schema public to username
    Ответ написан
  • Можно ли задать проверку значений в json поле Postgresql?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Нет, механизм foreign key так не умеет.
    Вынесите значение из json в настоящее поле таблицы (заодно сэкономите на занимаемом месте и стоимости обработки условий по этому полю) и создайте FK.
    Ответ написан
    Комментировать
  • Как найти причину "Exception: idle transaction timeout" в приложении Flask+psycopg2+postgresql+pgbouncer?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    и после убивания одного из них всё восстанавливалось.

    остаётся надеяться что не kill -9

    Начните с проверки, что ваше приложение действительно корректно переоткрывает соединение отстреленное по инициативе базы или баунсера. А не оставляет его в пуле навечно, выдавая сохранённый текст ошибки.

    Кстати говоря, вы не назвали версию pgbouncer. Возможно и баунсер вы поставили столь же старый как и базу. Припоминаю возможно релевантный фикс в 1.10
    Ответ написан
    8 комментариев
  • Как создать табличную функцию PostgreSQL c названиями колонок в качестве аргументов?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Так и должно быть.

    Если хотите строить запрос динамически - то и стройте его динамически в переменной, затем отправляйте на исполнение.
    Ответ написан
  • Как в PostgreSql гриппировать по признаку null/not_null?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Увидел 3 ответа, ну думаю, элементарно, ответили уже. Но зачем так сложно?
    group by field_name is null
    всё. Группировка по выражению, зачем его делать строкой в подзапросе или числом? bool самого по себе более чем достаточно.
    Ответ написан
    1 комментарий
  • Как в postgre привести типы?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    В postgresql нет типа данных tinyint.

    Из числа bool получить невозможно, потому дефолтного приведения не подразумевается. Если вас интересуе правило 0 - false, всё остальное true - то напишите в миграции данных (field != 0). Результатом будет bool.
    Ответ написан
    Комментировать
  • Почему where криво работает с boolean?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Потому что SQL - это троичная логика. true, false и NULL: https://www.postgresql.org/docs/current/functions-...

    null != что угодно - будет null в результате.
    Ответ написан
    Комментировать
  • Какие параметры вы используете, чтобы увеличить производительность БД?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    postgres=# select count(*) from pg_settings where source != 'default';
    count
    -------
    116
    (1 row)

    Типичная картина. Всё это в очередной раз расписывать что на что влияет и зачем для production меняется, в какие стороны крутить и насколько? Вот уж нет желания.

    Память, checkpointer, autovacuum, bgwriter в первую очередь.

    нагруженная бд с большим количеством соединений, с большим количеством запросов в секунду, с большим объемом записываемых данных.

    Машина имеет 4ram 4cpu.

    Ну-ну.
    Ответ написан
    Комментировать
  • Какая репликация лучше в Postgres?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    в постгрес есть автоматическое переключение мастеров

    Нет такого.
    Только внешние управляющие (patroni, например). Ну или в форках каких-нибудь, но это вопрос к этим форкам, а не к postgresql.
    Ответ написан
    Комментировать
  • Как сделать несколько count c разными фильтрами в sql?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    select count(*) filter (where status = 'active'),
    count(*) filter (where status = 'offline') ...


    наиболее оптимально

    не делать count вовсе.
    Ответ написан
    2 комментария
  • Как отфильтровать данные по всем полям объекта json в Postgresql?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    where exists(select from jsonb_each(variants) where (value->>'price')::numeric between 0 and 10);
    Ответ написан
  • Как реализовать репликацию БД в Postgresql?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Точно искали?

    CREATE ROLE replica WITH REPLICATION PASSWORD 'password' LOGIN
    проверить listen_addresses (ещё wal_level = replica или logical и max_wal_senders, но они дефолтные уже подходящие), добавить pg_hba разрешение этому пользователю на replication псевдобазу

    С реплики pg_basebackup -D /path -R -U replica -h primary_addr
    Потом запустить базу на реплике, всё готово.
    Ответ написан
  • Хранение данных с датчиков. Как формировать UUID?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Зачем? Если вы хотите генерировать uuid на базе - возьмите сразу sequence. Нет причин использовать uuid в этом случае, а неприятные побочные эффекты будут.

    Пришлось играться с Autoincrement, раздвинуть диапазон, чтобы нужный участок влез

    Зачем?
    Взяли данные и вставили данные сгенерировав новые sequence. sequence даёт гарантированно уникальные значения.
    Ответ написан
    Комментировать
  • Как и чем настроить инкрементальный бэкап PostgreSQL?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Судя по желанию делать бекап удивительно часто - вы пытаетесь найти PiTR.
    В целом: https://www.postgresql.org/docs/current/continuous...
    В частности: wal-g, barman, pgbackrest чтобы не собирать конструктор вручную.
    Ответ написан
    Комментировать
  • Какая БД лучше работает с репликацией master-master?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    с репликацией master-master

    Выбираем в первую очередь между PostgreSQL и MongoDB

    А вы специально выбираете между СУБД в которых мультимастера штатно вообще нет?

    Если вы подразумеваете какие-то расширения или форки - то и называйте именно их. Один критерий который вам надо проверить вы придумали сами. Допустимое ограничение на лаг тоже назвали. Второй критерий - четко определите своё понимание "корректная". В момент времени t строка обновилась, в момент времени t+1мс та же самая строка обновилась ещё раз на другом сервере. Налицо конфликт репликации. Что делать? Вот этот случай для себя распишите какое вы хотите поведение.
    Ответ написан
  • Как сделать чтобы большая БД держала нагрузку?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Ооо.... Вы это сейчас вообще серьёзно?

    Если вы запускаете DBaaS платформу и не знаете что делать собственно с базами - то у вас не
    Запускаю свою облачную платформу, код и архитектура создана с нуля.

    У вас нет вообще абсолютно ещё ничего и уж архитектуры - в особенности. Кроме "идеи", над которой бьётся давно и много кто, при том имея ресурсы на собственные команды DBA.

    Например: юзер пишет какой-то запрос и ему не нужно указывать на какой сервер что отправлять или откуда читать, для него это один сервер.

    Значит этому юзеру достаточно ходить только на мастер.
    Для сферического в вакууме приложения нет средств автоматически распределять запросы по репликам. И такое сделать вовсе невозможно без накладывания ограничений на использование. Например,
    select somefunc();
    Что делает эта функция? Она только читает данные и потому можно отправить на реплику или она пишет и потому должна быть на мастере? Хотите правильный ответ от контрибьютора postgresql? Это достоверно не знает даже сама база до тех пор пока не выполнит функцию.

    Другой пример:
    begin isolation level repeatable read;
    select ...
    update ...
    commit;

    Как максимум на запросе select вы должны уже знать можете ли вы эту транзакцию отправить на читающую реплику. Откуда бы вам это узнать заранее?
    И прочие принципиально-нерешаемые вопросы.

    DBaaS это не про большие базы. Как бы не хотелось маркетингу убедить в обратном. Это про небольшие или стартующие проекты, где проще переплатить сервису за относительно вменяемую настройку и сопровождение типовой конфигурации.
    Ответ написан
    Комментировать
  • Возможно ли переделать запрос без использования подзапросов?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    select distinct on (price_id), price_id,value  from tablename order by price_id, time_action desc


    Если на каждый price_id много строк - то вы неверно думаете что запрос замедляет.
    select price_id, value from prices as t1 lateral (select value from test t2 where t1.id=t2.price_id order by time_action desc limit 1) on true;

    Если таблицы prices нет - то сооружать loose index scan вручную.
    Всё разумеется с подходящим индексом.
    Ответ написан
    Комментировать
  • Не получается сделать дамп pg_dump. Как разобраться с ролями в Postgres?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    А смысл говорить про права если вы даже не подключились к базе?

    Хотите просто и не разбираться с правами - от postgres и снимайте дамп. sudo -u postgres pg_dump ...
    Ответ написан
    6 комментариев