• Почему не удалось перенести базу zabbix?

    Melkij
    @Melkij
    PostgreSQL DBA
    1. запустили намеренно pg_dump с отказом -O - то есть --no-owner
    2. развернули дамп от супера
    3. все объекты теперь ожидаемо принадлежат суперу, owner'а же не переносили
    4. удивляемся, что постороннему пользователю нет прав чтения

    Что же тут могло пойти не так?

    Самое простое для баз с одним пользователем - импортируйте дамп базы от имени этого самого пользователя. Если в базе есть какие-то extension - то сперва их создать от суперпользователя.
    Ответ написан
    3 комментария
  • Как pgbouncer обрабатывает idle сесии?

    Melkij
    @Melkij
    PostgreSQL DBA
    Зависит от pool_mode.

    В режиме session баунсер прозрачен для приложения: не налагает каких-то явных ограничений на использование, но один клиент к баунсеру = один коннект к базе. Соединение с базой сможет быть передано другому клиенту только после того как предыдущий клиент отключится. Поэтому этот режим используется очень редко.

    В режиме transaction пула коннект к базе выдаётся клиенту только на время транзакции. Самый распространённый режим работы, любим именно за то, что сколько бы тысяч коннектов не открыло приложение к баунсеру, на базе открыто небольшое число действительно потребовавшихся соединений.
    Но этот режим пула налагает ограничения на работу приложения. Вы не сможете нормально использовать ничего, что меняет состояние коннекта, потому что следующий ваш запрос с высокой вероятностью попадёт в другой коннект. То есть курсоры, временные таблицы, set (кроме set local), prepared statements (где parse, bind и execute могут разойтись по 3 разным коннектам)

    С prepared statements в transaction pool mode с недавних пор может помочь настройка max_prepared_statements, но только если prepare и deallocate выполняются именно командами протокола, но не SQL запросами. Тут многие широкоиспользуемые библиотеки оказались в пролёте.
    Ответ написан
    1 комментарий
  • Как pgbouncer обрабатывает idle сесии?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    pgbouncer начал поддерживать prepared statements совсем недавно и в ограниченном объёме. Если есть возможность - лучше от них избавиться.

    В целом в вашем случае пулер - то, что нужно. Если приложение не умеет само вовремя отключаться от базы, пусть лучше занимает слоты у pgbouncer.

    Принудительно рубить idle коннекты я бы не стал, но в целом это делается вот этим параметром:
    client_idle_timeout

    Client connections idling longer than this many seconds are closed. This should be larger than the client-side connection lifetime settings, and only used for network problems.

    Default: 0.0 (disabled)
    Ответ написан
    Комментировать
  • Как ведут себя данные при удалении?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В реляционных БД не существует гарантий относительно порядка записей внутри таблицы. Этот порядок
    - это особенности технической реализации хранения данных внутри блоков и сегментов. Это - "know how"
    и это будет зависеть от типа DBMS (Postgres, MySQL, Oracle) и от типа таблицы (heap, index-organized, clustered e.t.c)

    Если говорить грубо, то записи (data-rows) лежат не плотно а вразнобой с пробелами с выравниванием
    к блокам. Ну тоесть вообще-вообще не так как в Excel. Удаление data-rows в Postgres насколько я помню
    физически не удаляет запись а помечает ее мертвой используя служебные поля. Впоследствии VACUUM
    делает работы по уплотнению.

    Поэтому порядок ты сам обеспечиваешь, делая запрос с опцией ORDER BY some_date_time.
    Ответ написан
    1 комментарий
  • По какому принципу работает набор индексов в одной таблице?

    @Everything_is_bad
    Если я правильно понял, когда мы создаем индекс, у нас таблица изменяет порядок записей внутри себя сортируя их по указанным столбцам
    нет, никакой порядок не меняется, индекс это отдельные от таблицы данные

    И один индекс
    равен тому, если бы мы создали три индекса в такой последовательности
    нет, перестань уже придумывать и начни читать учебники и документацию

    Которые бы по очереди друг за другом добавляли правило сортировки в таблице, верно?
    опять ты что себе напридумал, нет никаких правил сортировки в таблице, индексы просто могут использоваться для ускорения сортировки

    Причем при изменении name обновление будет происходить дольше, чем при изменении price, потому что у нас price последняя в нашей очереди индексов по сортировке?
    когда фантазию уже не остановить
    Ответ написан
    4 комментария
  • Как автоматизировать запросы в Postgresql?

    @Everything_is_bad
    Prod закрыт по требованию отдела Безопасности.
    Проблема в ваших бизнес процессах, переделайте их с учетом требований от аналитиков. Если аналитикам нужны данные с прода, то, например, можно выдать им доступ только на чтение, только определенных данных, надеюсь "надо внести изменения в Prod-Postgresql от аналитиков" это опечатка и нужно только чтение (а то если тут запись, то с этим условием будет всё сложнее)? Либо сделайте slave только с ограниченными данными. Решение сильно зависит от того, что именно хотят делать аналитики и с какими данными.
    Ответ написан
    4 комментария
  • Почему Version of PostgreSQL not supported, если версии компонентов последние?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    phpPgAdmin History
    ------------------
    Version 7.13.0
    --------------
    Released: November 7th, 2020
    Features:
    * Add support for Postgres 13
    * Add provisional support for Postgres 14
    Ответ написан
    1 комментарий
  • Как можно получить изменения во VIEW, когда изменяется базовая таблица?

    Melkij
    @Melkij
    PostgreSQL DBA
    view не хранит никаких данных. Это просто сохранённое дерево запроса, встраиваемое в обратившийся к этой view запрос.
    Вам нужен триггер на таблице с данными, который будет писать в отдельную аудит таблицу историю изменений. Потом из этой таблицы получайте историю.
    Ответ написан
    Комментировать
  • Есть ли разница между запуском юнита для PostgreSQL с Type=simple и Type=notify?

    @Everything_is_bad
    Type=notify: идентичен параметру Type=simple, но с уточнением, что демон пошлет systemd сигнал готовности.
    погуглил за тебя.

    А так, лучше всего вообще поставить postgres средствами пакетного менеджера системы, он и нужный unit создаст и правильно всё проинициализирует.
    Ответ написан
    2 комментария
  • Как перенести базу данных из СУБД Postgresql в MySQL?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Представляете, если бы врачи с таким же уровнем понимания что делают делали трансплантацию органов? Нафаршировал пациента мелко порублеными топором органами донора и ждём выздоровления=).

    Ваш сервис видеоконференций наверно постоянно работает с БД, это значит, что для интеграции вам нужно постоянно делать экспорты. Странное решение дампить и переносить БД целиком. Типа если у вас молоток, то вокруг всё похоже на гвозди?

    Такие вещи обычно делаются в виде микросервисов. На худой конец можно сделать простенького демона, который будет ходить в БД конференций и селектить оттуда только нужные данные, и тут же вставлять в вашу другую базу в нужном формате. Не нужно ничего дампить и ковертировать, хотя наверняка и стандартными командлайнами с небольшой конвертацией SQL-кода регулярками можно добиться аналогичного результата. Но в учтите, это нагромождение непрофильных костылей будет невозможно поддерживать. Прдётся каждый раз сучить рукава и нырять в это говно, чтобы понять почему валится процесс не доходя до конца, или почему незаметно не доходят какие-то записи...

    Если сделать отдельный скрипт синхронизации\. то его можно хорошо про комментировать, задокументировать, обложить тестами и проверками, снабдить внятными и понятными сообщениями об ошибках. Нагромождение пайпов с конвертерами, регекспами и пакетными файлами сделать удобным и стабильным гораздо сложнее.

    Используйте профильные инструменты по назначению и не бойтесь осваивать новые. Такой вот совет.
    А если ближе к вашим попыткам, то смотрите глазами, SQL вполне читаемый, можно по шагам посмотреть что не так. Есть в экспортированном SQL данные? Что это за данные? Куда они вставляются? Есть они там, куда вставляются? Просто проследите поэтапнро.

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

    @Shavadrius
    Знакомая проблема: пользователи хотят видеть красиво пронумерованные документы.
    За годы работы так и не сформировал единого подхода к преобразованию "непонятного" ID в "красивые циферки".
    Есть такие реализации, может что подойдет:
    1. Считаем порядок по счетчику, который сбрасываем в начале года. Легко реализуется. Минусы: при удалении элементов будут "дыры" в последовательности, что не нравится пользователям.
    2. Считаем порядок динамически по дате добавления/утверждения записи. Легко реализуется. Минусы: при редактировании даты, добавлении документов "задним числом" нумерация поедет, что тоже не нравится пользователям.
    3. Рассчитывать следующий номер документа исходя из номера последнего сохраненного (N+1). Обычно работает в паре с возможностью изменения номера руками (администратором ИС, например) - сбрасываем ответственность за нумерацию на пользователей. Полно подводных камней: от необходимости реализовать "сместить все на единичку с такого-то документа" до "нумерация поехала, исправьте".

    Если запретить манипуляции с датами и удалением документов, то сбрасываемый счетчик очень хорошо себя показывает. Но это практически нереально - без манипуляций обойтись...
    Ответ написан
    1 комментарий
  • Хаотичное ухудшение производительности запроса - как определить причину?

    mayton2019
    @mayton2019
    Bigdata Engineer
    У Оракла есть пути стабилизации планов. Если ты точно знаешь что текущий план подходит то его можно
    зафиксировать для данного SQL_ID. Последний раз я этим занимался в Oracle 11g и как сейчас - не знаю
    но наверное этот API сохранился.
    Ответ написан
    Комментировать
  • Почему нет таблицы при подключении к базе Oracle?

    Viji
    @Viji
    Associate DevOps Engineer
    в PostgreSQL была похожая проблема, оказалось, что подключался к базе по умолчанию postgres, а не к своей базе. Проверь, может таже фигня с Oracle. До вывода таблицы, выведи название текущей базы и сравни
    Ответ написан
    Комментировать
  • Оптимизируется ли UPDATE, если значения полей на самом деле не меняются?

    Melkij
    @Melkij
    PostgreSQL DBA
    В postgresql создаётся физически новая версия строки при update (с обновлением всех индексов либо hot update если применимо) даже если ни одно поле не меняет своё действительное значение. Есть встроенный триггер suppress_redundant_updates_trigger, который можно повесить на таблицу, тогда ничего действительно не меняющий в данных update будет пропускаться.

    Если меняется хотя бы одно значение - оптимизации не подлежит, должна быть записана новая версия строки в таблицу (чтобы MVCC обеспечить). Если возможно, оптимизация HOT update исключит сопутствующее обновление индексов.
    Ответ написан
    9 комментариев
  • Postgresql не запускается. Почему в параметре TimeZone присутствуют два слеша?

    Anatolios
    @Anatolios Автор вопроса
    Новичок в IT. Инженер технической поддержки
    После выполнения этих команд, все завелось

    rm /etc/localtime; 
    cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime; 
    echo Europe/Moscow  > /etc/timezone;
    /etc/init.d/postgresql restart
    Ответ написан
    1 комментарий
  • Как составить запрос к нескольким таблицам?

    rozhnev
    @rozhnev
    Fullstack programmer, DBA, медленно, дорого
    Похоже Вам нужен UNION
    select 't1', phone           from t1 where phone = '987654321'
    union all select 't2', phone from t2 where phone = '987654321'
    union all select 't3', phone from t3 where phone = '987654321'


    https://sqlize.online/sql/psql14/ac0b0a66662794d8c...
    Ответ написан
    Комментировать
  • Выходит ошибка tns:protocol adapter error?

    vabka
    @vabka
    Токсичный шарпист
    Суда по ошибке - что-то на стороне Oracle не хорошее произошло.
    12560: https://stackoverflow.com/questions/6894558/ora-12...

    01017: https://stackoverflow.com/questions/14476875/ora-0...

    Проверьте ещё, что делали с ораклом недавно у себя.
    Ответ написан
    1 комментарий
  • Как проверить бекап postgres что он не битый?

    Melkij
    @Melkij
    PostgreSQL DBA
    Проверить бекап - путь только один, это восстановиться с него и посмотреть всё ли на месте. То самое известное, что все администраторы по наличию бекапов делятся на 3 типа: кто не делает бекапы, делает бекапы и тех, кто проверяет восстановление из бекапа.

    прервался ли pg_dump в какой-то момент - смотреть можно, как обычно, по коду возврата, а так же по stderr.

    PS: довольно тревожная мысль не сохранять права доступа
    Ответ написан
    5 комментариев
  • В postgresql параметр max_wal_size - размер всех сегментов или одного?

    Melkij
    @Melkij
    PostgreSQL DBA
    Ни то ни другое.

    max_wal_size - пороговое значение, при срабатывании которого начинаем checkpoint. Ближайший родственник checkpoint_timeout, только checkpoint_timeout вызывает checkpoint по прошествии указанного времени с прошлого чекпойнта, а max_wal_size - после записи такого объёма WAL. Работают оба, чекпойнт начинается смотря что произойдёт раньше.
    Ответ написан
    7 комментариев