Задать вопрос
  • Как использовать SQL запрос с to_tsquery и include?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Что такое include?

    чтобы в найденные объекты Lead добавлялись поля Unit, основываясь на unitId.

    Банальный join.
    Ответ написан
    Комментировать
  • Как создать БД от имени роли, имя которой не соответствует юзеру в Линукс?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Аккаунт ОС не имеет никакого отношения к пользователю БД. База может быть настроена проверять подлинность пользователя по соответствию имени пользователя - peer для unix sock. Но это не обязательно и это единственное что может связывать пользователя ОС и базу. (кроме учётки владельца, у того есть доступ напрямую к файлам)

    Но пользователь базы должен уже существовать. А раз вам нужно создать сперва пользователя - то тогда же создайте и базу для него.

    Далее следует сказать, что рядовой пользователь вовсе не может создавать базы данных. Это право должно быть выдано явно.
    Подключиться к postgresql можно только к конкретной уже существующей БД и у вашего пользователя должны быть права как на прохождение аутентификации указанным в hba методом так и права на подключение к нужной базе.
    Ответ написан
    Комментировать
  • Что нужно докупить к raspberry pi 3 b+?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Карта памяти поприличнее, блок питания, кабель питания, сетевой кабель.

    А вы какой ответ ожидали увидеть?
    Ответ написан
    5 комментариев
  • Почему wal-g backup-push зависает на Finished writing part 3?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    archive_command = '/usr/local/bin/backup_wal.sh'

    cat /usr/local/bin/backup_wal.sh
    #!/bin/bash

    . /etc/wal-g.d/server-s3.conf

    wal-g backup-push /var/lib/pgsql/9.6/
    wal-g backup-list

    Аааа?... Это вы сейчас серьёзно?

    Не будет это работать. archive_command вызывается на каждый сегмент WAL - 16мб изменений обычно. То есть легко десятки раз в секунду на нагруженных базах. Пытаться отсюда делать бекап кластера - идея ужасная.

    wal-push в archive_command должен быть. backup-push отдельно, из крона обычно.
    Ответ написан
    Комментировать
  • Возможна ли репликация с 10 postgres серверов на один общий сервер?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    как более правильно выполнять репликацию

    А что хотите-то?

    Штатной логической репликацией (pg 10 и выше) или через pglogical или даже триггерной репликацией можете реплицировать в одну базу. Корректное внесение DDL за свой счёт.
    Для физической репликации - репликация строго 1:1, потому разные инстансы базы. Всякие докеры абсолютно не нужны для этого. Разворачиваете реплики в разных директориях и на разных listen портах и всё. В ubuntu/debian штатные скрипты pg_ctlcluster даже есть чтобы инстансами удобно рулить.
    Ответ написан
    1 комментарий
  • Контроль I/O для сервера. Как ограничить потребление IOPS?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    См. механизм cgroups.
    Крутилки для io там были, например: https://unix.stackexchange.com/q/48138
    Ответ написан
    1 комментарий
  • Mysql индексы и DESC сортировка - как подружить?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    mysql давным давно умеет backward index scan.
    select * from events order by event_date desc limit 10
    select * from events order by event_date asc limit 10

    Оба могут использовать индекс по event_date.

    Начиная с 8.0 вы даже можете указать направление сортировки индекса и самостоятельно. ASC и DESC в определении индекса больше не игнорируются.
    Ответ написан
    1 комментарий
  • Как настроить KVM виртуализацию с двумя бриджами?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Чем вам поможет KVM, да и любая виртуализация в принципе, если софтинку убить нельзя, а она объедается памяти без ограничений? Всё равно OOM будет.

    Настройка сети KVM для вашего случая ничем не отличается, даёте ей один vif подцепленный на br1 и 10.0.0.250/24 в качестве default gateway. Кроме разве что того, что настройки IP адресации вам надо указывать в самом госте. Ну или dhcp настроить.
    Ответ написан
    2 комментария
  • Как вывести большую таблицу через flask из postgresql?

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

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Если у вас это корректный json (или jsonb) а не то что показали:
    where jsonfield->'contacts'->>'email' = 'foo'

    Если там именно какой-то такой странный формат - то пишите его парсер.
    Ответ написан
    Комментировать
  • Как сделать выборку, обновить для нее записи и вернуть курсор с ними?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Не надо изобретать кривой велосипед с очередной очередью. Оно не будет работать под нагрузкой. Возьмите pgq.

    Ну а если всё равно хотите пособирать эти грабли:
    update tablename set status = 1
    where status = 0 and id in (
    select id from tablename where ..... order by ... limit ... for update
    )
    returning ...
    Ответ написан
  • Как получить полный размер кластера Postgresql (сумму размера всех БД на сервере)?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    select sum(pg_catalog.pg_database_size(d.datname)) from pg_catalog.pg_database d;


    Вот только полный размер кластера не то же самое что сумма размера всех БД. Размер кластера считается как du -s от $PGDATA
    Ответ написан
    Комментировать
  • Как поменять формат времени на Linux?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Вопрос к вашему приложению. Приложения форматируют вывод самостоятельно.
    Ответ написан
    Комментировать
  • Переход на postgresql (с mysql) в миграциях laravel?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Но в postgresql есть есть тип serial

    неа, нет его.
    Это именно синтаксический сахар вокруг create sequence + integer с DEFAULT nextval('users_id_seq'::regclass)
    Посмотрите в pg_dump, не найдёте ни одного serial

    вручную изменить тип поля на serial?

    alter table foo alter COLUMN i type serial;
    ERROR: type "serial" does not exist

    А вот не сможете, нет такого типа данных.

    2. unsigned
    Оказывается его нет в postgresql. Заменить на CHECK (имя_поля >= 0)? Или ещё какие варианты (если есть, то чем они лучше)?

    Да, unsigned типов нет. Можно check к полю добавлять, можно сделать create domain сразу с check и использовать имя этого домена в качестве типа данных.

    И опять-таки в миграциях лары нет никакого check()

    Я думаю в этих миграциях нет почти всего, даже из SQL92 стандарта. Утилиты миграций за исключением тех, что дают выполнять произвольный SQL, обычно ничего не умеют из возможностей базы, стоит лишь чуть копнуть вглубь.

    3. массивы
    Для mysql использовала string и туда записывала данные в виде json. Для postgresql пока выбрала прямо json. В миграциях он доступен. Или стоит выбрать тип массива? В чём разница между массивами и json в postgresql?

    Есть json. В json бывают массивы, бывают объекты, скаляры.
    Есть отдельно массивы в postgresql как отдельные типы данных. Вы можете сделать массив из json документов.
    Разница между json и массивами - разные наборы функций, операторов.

    Что-то laravel, как я пока вижу, мало адаптирован к работе с postgresql.

    Раз для mysql вместо json используется string (text видимо всё-таки) - то и для mysql не очень адаптирован. Ну или у вас mysql какой-то очень сильно древний.
    Такие конструкторы обычно адаптированы под людей, которые не знают и знать не хотят свою базу.
    Ответ написан
  • Postgres, как создать новую таблицу, которая полностью соответствует другой таблице?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    create table new_city (like city including all);
    insert into new_city select * from city;


    Если условия позволяют, то быстрее будет сдампить, переименовать и записать обратно.
    pg_dump -t city -Fc -Z0 -f reimport.pgdump
    alter table city rename to new_city;
    pg_restore -f reimport.pgdump
    Быстрее на индексах, которые лучше строятся после записи данных.

    А чтобы сразу склонировать таблицу - такого вроде нет, очень узкий usecase
    Ответ написан
  • Как сделать ALTER TABLE для postgres pglogical?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    https://github.com/2ndQuadrant/pglogical/blob/REL2...
    Попробуйте указать запрос с полным наименованием таблицы.
    Вероятно в схеме public у вас таблица:
    SELECT pglogical.replicate_ddl_command('ALTER TABLE public.aaa_plc_banned_domains ADD Phone2 CHARACTER VARYING(20)');
    Ответ написан
    4 комментария
  • SSD+HDD или один SSD?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Какая разница с потерей данных?
    Данные нужны? Значит у вас есть бекапы.
    Если нет бекапа - значит данные не нужны и не важно, какого типа расходник там сдох. Всё равно долго и дорого восстанавливать, даже если удастся нужные файлы восстановить.
    Ответ написан
    Комментировать
  • Как делаете периодическое обслуживание PostgreSQL, если у вас есть большие базы с большими таблицами на сотни ГБ?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Под периодическим обслуживанием я подразумеваю vacuum, reindex, analyze

    А зачем?
    Обратите внимание: это вопрос от postgresql DBA. Да, у нас есть таблицы и на несколько террабайт.

    После нормальной настройки автовакуума под железо (вместо дефолтных настроек под любую кофеварку) с вакуумом и analyze нормально справляется автовакуум.
    Вместо reindex - pgcompacttable, pg_repack, да хоть вручную или каким-нибудь своим скриптом create index concurrently + drop index concurrently
    Ответ написан
    Комментировать
  • Как правильно делать бекапы Postgresql, который "обитает" в докер контейнере?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Для начала понять, нафига вам вообще нужная база в докере. Раз нужны бекапы - то очевидно база нужная. Не раз видел нужные базы без бекапов, а вот настроенных бекапов для ненужных - как-то не припоминаю. А раз нужная база - то зачем здесь докер? Внимательно осмыслить этот вопрос. Если сможете удивить меня - буду весьма благодарен, до сих пор ни один из опрошенных адептов докера с таким простым вопросом не справился.

    Ну а далее определитесь с требованиям к бекапам. Глобально возможности есть две, и обе никак не относятся к тому, где размещены бинарники базы. Можно выполнять вообще с другого хоста по сети.
    Во-первых, можно периодически снимать логический дамп данных с помощью pg_dump или pg_dumpall. Плюс: они компактнее, обычно сильно компактнее, плюс неплохо сжимаются, для форматов custom и directory возможно восстанавливать объекты выборочно, например только одну таблицу. Можно бекапить отдельные базы, исключать из дампа что-нибудь ненужное. Минусы: существенное время восстановления, в частности из-за необходимости построения всех индексов; восстановление возможно только на момент начала снимания дампа.
    Во-вторых, можно снимать бинарную копию и вести журнал WAL. Плюсы - возможность восстановления базы на произвольный момент времени от окончания pg_basebackup и до тех пор пока есть непрерывный архив WAL. Но basebackup занимает ровно столько же места сколько кластер, плюс архив WAL. Бекапить можно только весь кластер целиком. Восстанавливать так же можно только целиком.
    Чтобы не собирать самостоятельно вся обвязку вокруг pg_basebackup, посмотрите pgbackrest, barman. wal-g можно для хранения в s3.

    Вполне осмысленно можно использовать оба способа одновременно, архив wal для point-in-time recovery, а так же например раз в неделю/месяц логический дамп для более долговременного хранения. Бывает порой такое, а "давайте восстановим годовой давности табличку".
    Ответ написан
    Комментировать
  • Почему не получается запустить миграцию(php yii migrate)?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Access denied for user 'yii2user'@'localhost' (using password: YES)'

    База вас слушает и слышит. И ей не нравится как вы представились.
    Проверяйте, есть ли таковой пользователь, точно ли у него такой пароль.
    Ответ написан
    3 комментария