Задать вопрос
Ответы пользователя по тегу PostgreSQL
  • Как организовать синхронную репликацию БД PostgreSQL на географически удаленных серверах?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Берёте и настраиваете.
    По настройкам сети - любые извращения, лишь бы у вас был открыт tcp порт (тот на котором слушает ведущий, 5432 обычно) от реплики к ведущему.
    За синхронность репликации отвечает synchronous_standby_names при включенном synchronous_commit

    Учтите что синхронная репликация при географическом распределении - больно. Именно жирным шрифтом. Как по производительности, так и по стабильности работы на запись данных - если чуть что с сетью - то ведущая база у вас ничего писать не будет пока не почините сеть. Потому что синхронная репликация.
    Ответ написан
    Комментировать
  • Помощь в расшифровки логов postgresql?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Не "оператор" потому что а statement - и будет сразу немного понятнее о чём речь.

    Первый delete пришёл через extended protocol так же известный как prepared statements. Рядом помимо execute должны быть ещё parse и bind.
    Второй - через simple query протокол, то есть просто текст запроса.
    Ответ написан
    2 комментария
  • Есть ли способ спросить у PostgreSQL, с какими запросами у него возникают наибольшие сложности?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Поставить pg_stat_statements, спустя какое-то время посмотреть что тот собрал. Например, нашим отчётом
    Ответ написан
    1 комментарий
  • Как указать доктрине, какой неймспейс использовать?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Слово namespace здесь неверно.
    Ищите по schema name и конкретно search_path

    Странно что вы не знаете что такое search_path, но он у вас модифицирован. В дефолтную настройку схема public включена и потому оба ваших запроса обычно делают одно и то же.

    В доктрине начиная с 2.5 схема указывается так:
    /**
     * Clerk
     *
     * @Table(schema="schema")
     */
    class Clerk { }

    Не уверен что будет работать для public схемы если доктрина предполагает что оно в search_path есть и так.
    Ответ написан
    1 комментарий
  • Как сделать репликацию PostgreSQL и распределение нагрузки с учётом нагрузки от записи, а не чтения?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Внимание вопрос: зачем?

    100 записей в секунду и 5 чтений в минуту - это ни о чём.
    Писать 10000 записей в секунду - ну и? Никакой проблемы держать на одной железке и это в обычном OLTP, а не 99% write/1% read как у вас.

    Взять адекватные диски, выкинуть к чертям докер. А для hot standby масштабировать запись не нужно. Простая и надёжная потоковая реплика.

    монго можно разделить на X нод без шаманских танцев с бубном

    Спасибо, хорошая шутка.

    На всякий случай: вы ведь поминаете что никакая репликация для масштабирования записи не может помочь? Если каждый хост должен содержать копию данных - значит он должен все данные записать. Для масштабирования записи - шардирование верное слово. Только это не про сотни транзакций записей.
    Ответ написан
    1 комментарий
  • Настройка Sequelize. Какое количество соединений?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Настраиваете мониторинг, запускаете проект. Правите настройки или сам проект по ситуации.
    Знаю системы где пяти коннектов базы хватает на сотни транзакций в секунду. Знаю системы где полсотни коннектов постоянно заняты непойми чем.
    Ответ написан
    Комментировать
  • Как найти причину падения \ замедления работы сервера с PostgreSQL?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    весьма мощный сервер (8gb

    Дааааа? А я думал дохленькая виртуалочка. Довольно средние железки на 256гб тогда что?

    На тяжелые запросы не грешу, т.к., во-первых, билд запросов на 100% отдан ORM (Eloquent, Lumen), и возможность кривыми руками написать какой-нибудь count(*) сведена к нулю

    Ха. Хахахаха. Хорошая шутка.
    Самый лютый бред вместо запросов делают именно ORM.

    Выкручивать настройки логирования, в момент проблемы смотреть хотя бы вот это: https://github.com/dataegret/pg-utils/blob/master/...
    Ставить какой-то мониторинг, умеющий мониторить базу.
    И смотреть что именно делает база и чем занято железо в момент проблемы. Особенно I/O. process title бы хоть сохранили/написали. Там и то продублирован command tag.
    Ответ написан
    Комментировать
  • В Postgresql схема: зачем нужна и как я её могу использовать в своих проектах?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    В оракле схем разве нет?..

    schema - дополнительный уровень структуризации объектов. Как namespace в программировании. И, к слову, входит в стандарт SQL.

    Вы можете сделать таблицы:
    user_subscriptions
    user_orders
    user_favorites
    Вы можете сделать
    user.subscriptions
    user.orders
    user.favorites
    И в этом нет никакой разницы для СУБД. Но может быть удобно разработчику оперировать не с сотней таблиц одним списком, десятки из которых с одинаковыми префиксами (т.к. относятся к своим сущностям), а отдельные схемы по сущностях.

    Пилить же одну таблицу на несколько смысла при этом не так много, зато добавляется хлопот.
    Если вы хотите давать прямой доступ пользователю к базе - то зачем? Не надо так делать в разделяемой среде. Любую СУБД можно положить каким-нибудь интересным запросом. А в то что люди временами будут писать интересные и сильно творческие запросы - по опыту DBA вам гарантирую. Иногда такого наворотят... 0,5тб временный файлов одним запросом, например. Или сожрать 30гб RAM и увести базу в аварийный рестарт от OOM.
    Ответ написан
    1 комментарий
  • Как в запросе на PostgreSQL добавлять только уникальные значения?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    on conflict do nothing
    https://www.postgresql.org/docs/current/sql-insert.html
    Ну и уникальный индекс по полю, конечно.

    Если вы на 9.4 в котором on conflict нет - обновляйтесь. 9.4 EOL через полгода.
    Ответ написан
    4 комментария
  • Как можно оптимизировать запрос с COUNT и SUM в PostgreSQL?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    PostgreSQL 11.0 (Debian 11.0-1.pgdg90+2)

    Спасибо за поддержку в первые пару недель после релиза, но в чём смысл этим заниматься в 2019 году? Чуть ли не единственный ответ что можете ожидать на багрепорт: проверьте сначала на актуальной версии.

    Для данной таблицы создал индексирование следующим образом:

    Зачем?

    Какие на ваш взгляд есть узкие места в этом запросе.

    count на MVCC базе. Для OLAP - ок, пусть себе шуршит.
    Для чего-то более быстрого - прикручивать предварительно агрегированные срезы.

    TREE_ORGANIZATION_ID (varchar)

    см. ltree
    Хотя судя по LIKE CONCAT('%', '\', '27623', '%') - скорее даже массив.
    Ответ написан
    Комментировать
  • Генерировать уникальное значение?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    create sequence serial_number_seq minvalue 1 maxvalue 999999999;


    Сделать новое число - nextval('serial_number_seq')
    Гарантированно уникально. К строке, если очень хочется, можете привести сами
    Ответ написан
    6 комментариев
  • Запрос с функцией COUNT с помесячный разбивкой?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    select admin_id
    count(*) filter(where created_at >= '2019-01-01' and created_at < '2019-02-01'),
    count(*) filter(where created_at >= '2019-02-01' and created_at < '2019-03-01'),
    ....
    from tablename where ... group by admin_id

    Или tablefunc

    А называется то что вы хотите получить - PIVOT.
    Ответ написан
    4 комментария
  • Как дать пользователю возможность перезапустить сервис postgresql?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Зачем вам рут для поиграться с базой? Postgresql прямо запрещает запуск себя от рута.
    initdb куда скажут себе в хомяке и стартовать оттуда базу через pg_ctl может любой пользователь с доступом к консоли. Порт только себе выбрать любой свободный выше привилегированного диапазона. И играйтесь в своё удовольствие, никаких особых прав для этого не надо.
    Ответ написан
    3 комментария
  • Как использовать в условии запроса псевдоним поля?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Никак. В секции where полей из select ещё не существует.

    Продублируйте условие, оберните ещё в один select, сделайте хранимую функцию и вызовите её в where и в select.
    Ответ написан
    1 комментарий
  • Как очистить таблицу?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Если truncate выполняется дольше секунды - значит truncate не выполняется вовсе, а ждёт блокировку.

    Посмотрите в pg_stat_activity where state != 'idle' на предмет долгих транзакций.
    Или сразу запросом по pg_locks, например, вот таким: https://github.com/dataegret/pg-utils/blob/master/...

    Нормальный мониторинг - вопрос отдельный, сложный и печальный.
    Ответ написан
  • Как создать таблицу из другой с использованием другого sequence для id столбца?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    melkij=> create table identity_test (i int primary key generated by default as identity, val int);
    CREATE TABLE
    melkij=> insert into identity_test (val) values (1);
    INSERT 0 1
    melkij=> table identity_test;
     i | val 
    ---+-----
     1 |   1
    (1 строка)
    
    melkij=> create table identity_test_like (like identity_test INCLUDING COMMENTS INCLUDING CONSTRAINTS INCLUDING DEFAULTS INCLUDING INDEXES);
    CREATE TABLE
    melkij=> \d identity_test_like
                        Таблица "public.identity_test_like"
     Столбец |   Тип   | Правило сортировки | Допустимость NULL | По умолчанию 
    ---------+---------+--------------------+-------------------+--------------
     i       | integer |                    | not null          | 
     val     | integer |                    |                   | 
    Индексы:
        "identity_test_like_pkey" PRIMARY KEY, btree (i)
    
    melkij=> \d identity_test
                                    Таблица "public.identity_test"
     Столбец |   Тип   | Правило сортировки | Допустимость NULL |           По умолчанию           
    ---------+---------+--------------------+-------------------+----------------------------------
     i       | integer |                    | not null          | generated by default as identity
     val     | integer |                    |                   | 
    Индексы:
        "identity_test_pkey" PRIMARY KEY, btree (i)


    include identity нет - identity не скопирован. Всё выглядит корректно.

    Если же вы не про identity, а про синтаксический сахар serial - то его nextval был скопирован потому вы сами это попросили через INCLUDING DEFAULTS.
    Типа данных serial нет. Это синтаксический сахар вокруг поля int, создания sequence и указания nextval в default.
    Ответ написан
    Комментировать
  • Почему пухнет WAL каталог?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Если реплика приостанавливает репликацию (видно по waiting в списке процессов для startup процесса) - значит ей мешают запущенные на ней транзакции. Проверьте свой max_standby_streaming_delay.

    В целом почему база может не удалять WAL сверх необходимых:
    - создан слот репликации но его не читают
    - archive_command выполняется с ошибкой
    Ответ написан
  • Ошибка при вызове метода getImportedKeys?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Проверяйте версии используемого ПО. Ваша библиотека предоставляющая вызов getImportedKeys очевидно не умеет используемую у вас версию PostgreSQL.
    Последний релиз postgresql где было поле tgconstrname системного каталога - далёкий 8.4
    Ответ написан
  • Как освободить место после удаления базы postgreSQL?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    pg_upgrade --link ?
    Бесполезный datadir от 9.5 удалили? pg_upgrade создал скрипт delete_old_cluster после обновления для этого.
    Ответ написан
    Комментировать
  • Какова правильная практика использования уникального идентификатора(Postgres SERIAL)?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Как Вы поняли в поле "а" вписывается ответ "no" или "yes" .

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

    В моем бизнесе вопросы собраны в Репорт (Репорты разные. В зависимости от Репорта имеют от 10 до 70 вопросов). Таким образом ответы заходящие в таблицу user нужно разделять по Репортам.

    Хотелось бы знать, как из первого вытекает второе.

    Если у вас есть некие "репорты", состоящие из некоторого числа вопросов, а на вопросы отвечают пользователи то совершенно очевидно у вас есть:
    таблица пользователей
    таблица репортов
    таблица вопросов с полем-ссылкой на репорт
    таблица ответов из 3 полей: id пользователя, id вопроса, значение ответа. Primary key на первые два поля.
    Ответ написан
    Комментировать