Задать вопрос
  • Как осуществлять быстрый поиск по вхождениям?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Поиск точного вхождения подстроки в строку? LIKE '%...%'
    Плюс триграммный индекс из pg_trgm contrib
    Ответ написан
  • Как добавить FOREIGN KEY, если поле может быть NULL?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    INSERT INTO `city` (`country_id`, `region_id`, `title`) VALUES (109, 0, 'Москва')

    А вот если вы попробуете писать NULL вместо вот этого - то всё получится и именно так FK и работает, допуская использование NULL.
    Ответ написан
    2 комментария
  • Как скорректировать время в результате select?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    В таблице есть столбец с данными типа timestamp.
    Время там хранится UTC

    Мигрируете на timestamp with time zone
    Затем проставляете желаемый set timezone to '...'; и получаете всю обработку для timestamp with time zone корректную в этом часовом поясе.

    не красиво перечислять их все ради того, чтобы скорректировать один.

    Красиво - это перечислить явно и только те поля, которые в результате вам нужны.
    Если в этом дурацком засилье orm вы пишете запрос руками - значит вы явно должны знать, что именно и зачем вы хотите прочитать. Следовательно, select * показывает явный антипаттерн.
    Ответ написан
  • Postgresql-10 как работает логическая репликация из коробки(вопросы по теме под катом)?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    1) Можно ли создать логическую репликацию на уровне схемы

    Нет.
    Ответ есть даже в мануале: https://www.postgresql.org/docs/10/sql-createpubli...
    Банально нет даже синтаксиса для создания публикации схемы.

    2) Связи между таблицами также будут реплицыроватся?

    Что вы имеете в виду?
    DDL вы переносите на подписчиков сами. Реплицируются только данные
    TRUNCATE and DDL operations are not published.

    truncate начали реплицировать в pg11. Репликации DDL нет и не будет как минимум ещё в pg12, на данный момент нет ни черновых патчей ни даже обсуждений таковой реализации.

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

    PS: есть некоторая терминологическая путаница, как англоязычная так и русскоязычная, schema и схема как namespace или schema и схема говоря о структуре базы, т.е. DDL
    Ответ написан
    Комментировать
  • PHP PDO подключение к MySQL 8.0 невозможно?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    The server requested authentication method unknown to the client [caching_sha2_password]

    такое?
    У вас не PHP 7.3.
    php.net/manual/en/ref.pdo-mysql.php
    Было исправлено в 7.1.16 и 7.2.4. PHP 7.3 такое знает сразу с релиза.
    Ответ написан
  • Насколько like с процентом на конце эквивалентен between?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Если задумку реализовать корректно - то эквивалентны. Должны быть. У вас пока не эквивалентны, потому что
    melkij=> select '\uFFFF';
     ?column? 
    ----------
     \uFFFF

    Так unicode escapes не пишутся. E'\uFFFF'

    Хотя обычно берут штатный text_pattern_ops и like работает нормально.
    Ответ написан
    1 комментарий
  • Как организовать zerodowntime обновление СУБД?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Вы должны разрабатывать и деплоить приложение соответствующим образом. Так, чтобы старая версия приложения могла работать с новой версией схемы базы. Или наоборот, новая версия приложения могла работать со старой схемой базы.
    То есть удаление таблички: сначала деплоите приложение, которое уже не работает с этой таблицей, потом удаляете таблицу
    Новая табличка: сначала миграция, затем приложение
    Новое поле в таблице с default значением: сначала поле, затем приложение
    Новое поле без default: сначала новое поле с default null, затем релиз приложения которое обязано писать новое поле, но ещё не читать его (либо приводить null к нужному если это возможно на приложении), затем миграция с проставлением нужного значения (и, блин, не одним update по всей большой таблице), drop default, set not null, деплой приложения со всей логикой
    И так далее. Во время разработки думаем, а как, когда и в сколько итераций это можно будет задеплоить.

    Ну и, разумеется, DBA (или заменяющий его обязанности человек) думает над тем, как именно вносить нужную миграцию в базу
    Ответ написан
    Комментировать
  • Как работать с БД Postgres и 1с?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Долго и мучительно раскуривайте эту кладезь бреда и авгиевы конюшни говнокода под названием 1с.
    Эти люди в принципе не умеют работать с СУБД. И в базе там абсолютный ад и бардак, всё верно.

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

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

    Если хотите снизить латентность - сохраняйте уже открытые соединения.
    Если хотите повысить пропускную способность - уменьшайте число активных процессов.
    Очень сильно лучше и то и другое сразу. Поэтому да, pgbouncer. Или хотя бы разумных размеров пул на приложении.
    Ответ написан
    2 комментария
  • Есть ли в PostgreSQL 11 планировщик задач из коробки?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Нет, такого нет. Потому что непонятно зачем нужно.

    Если сможете аргументированно указать сообществу, что такая штука зачем-то нужна - welcome. Потом найти заинтересованного разработчика (ну или самостоятельно), кто возьмётся за обсуждение пользовательского интерфейса, напишет патч и доведёт его до согласия с как минимум одним коммитером при отсутствии резких возражений от остальных участников сообщества.
    Сейчас готовится pg12, никаких обсуждений планировщиков задач нет. Поэтому маловероятно, что появится и в pg13 релизе.
    Ответ написан
    1 комментарий
  • Как правильно заресторить postgres cluster?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    с pg_basebackup

    Важна конфигурация.

    Варианта есть два:
    - у вас есть архив WAL, который пишется из archive_command/archive_mode. Тогда указываете в recovery.conf restore_command, который будет тянуть WAL из этого вашего настроенного архива
    - у вас нет архива WAL. Тогда вы обязаны вызывать pg_basebackup с -X stream (емнип, это дефолт начиная с 10, но лучше указывать всё равно явно). Или хотя бы с -X fetch - но гарантий в этом случае никаких.

    Без WAL старт невозможен.
    Ответ написан
  • Как ускорить запрос с DISTINCT в PostgreSQL?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Планировщик Postgresql на данный момент не умеет loose index scan. Поэтому планировщик вполне обоснованно со своей точки зрения выбирает не использовать какие-либо индексы.

    Поэтому если необходим именно distinct по не очень селективному полю - то эффективнее объяснить планировщику что от него хотят руками: https://wiki.postgresql.org/wiki/Loose_indexscan

    Вам же скорее необходимо менять схему хранения данных.

    Возможно в самом запросе нужно явно указать, чтобы использовался индекс. Как это сделать в PostgreSQL?Возможно в самом запросе нужно явно указать, чтобы использовался индекс. Как это сделать в PostgreSQL?

    Никак. Сообщество сознательно PostgreSQL отказывается добавлять какие-либо хинты планировщика, предпочитая узнавать об ошибках планировщика как о багах и по возможности их исправлять.
    Ответ написан
    5 комментариев
  • Как продемонстрировать MVCC в Postgresql?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    t1
    begin;
    t2
    begin;
    update tablename set foo = 10;
    t1
    select * from tablename; -- не ждём блокировку, не видим результаты изменений из t2. Такое только в MVCC и бывает.
    Ответ написан
  • Как реализовать миграцию больших таблиц без блокировок?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Можно я сошлюсь на своё сочинение на SO? https://ru.stackoverflow.com/q/721985/203622

    Впрочем пару слов добавлю:
    добавив к примеру столбец

    Важно какой именно. Если default null - просто берёте и добавляете со statement_timeout в 1 секунду. alter table всё равно возьмёт блокировку на таблицу, но default null поле - это лишь быстрое обновление системного каталога.
    Если другой default - то для pg11 просто берёте и добавляете с таймаутом, для более старых немного приключений.
    Ответ написан
    2 комментария
  • Таймаут запроса postgresq?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Смотрите точное сообщение об ошибке. Лучше на языке оригинала, в переводе могли что-то потерять.

    В списке переводов вижу:
    msgid "canceling statement due to conflict with recovery"
    msgstr ""
    "выполнение оператора отменено из-за конфликта с процессом восстановления"
    --
    #, c-format
    msgid "canceling statement due to lock timeout"
    msgstr "выполнение оператора отменено из-за таймаута блокировки"
    --
    #, c-format
    msgid "canceling statement due to statement timeout"
    msgstr "выполнение оператора отменено из-за таймаута"

    "canceling statement due to statement timeout" - это строго про statement_timeout. Значит для той транзакции он не 0

    Запретить клиенту ставить самому себе таймаут невозможно. Ищите, где перед этим запросом таймаут выставляется.
    Ответ написан
    Комментировать
  • Можно ли два PXE-сервера засунуть в один TFTP?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    PXE кто дальше грузит? pxelinux?
    pxelinux опрашивает конфиги по порядку: https://www.syslinux.org/wiki/index.php?title=PXEL...
    Соответственно можете на каждого клиента развесить разные конфиги PXE.
    Или по DHCP раздавать Option 209 pxelinux.configfile, на который pxelinux тоже согласно доке реагирует.
    Ответ написан
    Комментировать
  • Как решить проблему с настройкой RAID массива?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Если у вас нормальные SSD (а для hetzner это надо отдельно выяснять - могут откровенный мусор поставить под видом datacenter ssd) - то вам вообще не нужен RAID-контроллер.
    Разве только вы умеете конкретно этот контроллер аккуратно настраивать под работу с SSD. Иначе вы упрётесь в производительность контроллера, а не в возможности накопителей. RAID контроллеры уже давно не успевают за хорошими SSD
    Ответ написан
  • \. В sql файле?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    с помощью утилиты pgsql

    Не знаю таких. Что это за утилита, что делает, как это делает?

    что значит \.

    Так помечается конец данных для COPY. https://www.postgresql.org/docs/current/sql-copy.html
    End of data can be represented by a single line containing just backslash-period (\.).


    емнип, php вовсе не может выполнять copy from stdin как запросы, только как функции PDO::pgsqlCopyFromArray для PDO или pg_put_line, pg_end_copy для php-postgresql расширения.
    Ответ написан
    Комментировать
  • Можно ли установить libvirt отдельно?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    apt-get install --no-install-recommends libvirt-clients python-libvirt


    kvm и qemu в рекомендуемых пакетах упомянуты, установка которых обычно включена
    Ответ написан
    4 комментария
  • PostgreSQL: Как добавить данные?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Сначала сделать copy в другую табличку с текстовыми полями (temporary table вполне подходящее место), затем insert .. select запросом перенести куда надо с любыми манипуляциями по пути.

    Или сделать хранимку на любом языке и читать файл через неё, преобразуя данные по пути.
    Ответ написан