Задать вопрос
  • Как преобразовать значения к типу в PDO?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Насколько я помню: https://github.com/php/php-src/blob/PHP-8.0/ext/pd...
    Нужен mysqlnd для получения родных типов данных.
    Ответ написан
    Комментировать
  • Последовательное включение жёстких дисков, можно ли и как?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Power-up in standby (PUIS). Должен уметь контроллер дисков.

    Почитайте вот этот топик: https://forum.ixbt.com/topic.cgi?id=11:44797 может быть найдёте что-то для себя полезное.
    Ответ написан
    Комментировать
  • Как оптимизировать update postgresql?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    UPDATE orders_new
    SET client_code=access.title
    FROM orders_new O

    Ну классика жанра. Если не видите self-join - то посмотрите ещё раз. Очевидно ошибочный запрос.

    https://www.postgresql.org/docs/current/sql-update.html
    Do not repeat the target table as a from_item unless you intend a self-join (in which case it must appear with an alias in the from_item).
    Ответ написан
  • Какую базу и способ хранения выбрать?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    База на 30гб? Какая смешная кроха.

    Да сгенерируйте себе синтетических данных и поиграйтесь с ними. Я понимаю неудобно на локальной машине щупать базу в десяток террабайт - но лишь только 30гб не проблема просто сгенерировать и посмотреть вживую.
    Ответ написан
    1 комментарий
  • Что происходит при повторном запуске команды MySQL source?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    source читает указанный файл с начала и до конца, передаёт серверу как будто это SQL команды. Никакой дополнительной логики не предполагается.
    https://dev.mysql.com/doc/refman/8.0/en/mysql-batc...

    Эквивалент "mysql db_name < text_file"
    Ответ написан
  • Как избавиться от ошибки с prepared statement при работе с PostgreSQL через PgBouncer?

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

    Замените слово "PgBouncer" на "ваше приложение" и тогда получите относительно верное описание происходящего.

    С практически 100% вероятностью у вас pgbouncer сконфигурирован в режиме transaction pool mode. А выполнение любого нового запроса в extended protocol (prepared statement) состоит из трёх вызовов:
    - prepare
    - bind
    - execute
    Нет ничего ошибочного в том, что pgbouncer сконфигурированный в режиме пула транзакций может направить каждое из этих 3 сообщений в разные коннекты базы. Это прямым текстом задокументированное ограничение пула транзакций. Итог закономерный, соответствующие процессы базы не понимают о чём речь и выражают удивление такими ошибками.

    Отключите использование server-side prepared statements на приложении.
    Ответ написан
    2 комментария
  • Почему не компилируется эта функция?

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

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Раздел данных, который с высокой вероятностью нужно расширять делаете в конце блочного устройства. Так, чтобы за ним ничего не было. И неважно, рутовый это раздел или ещё какой.
    Когда понадобится расширить:
    1. расширяете блочное устройство
    2. через parted командой resizepart увеличиваете раздел
    3. затем расширяете файловую систему: resize2fs для ext4, xfs_growfs для xfs. Если у вас какая-то вдруг другая экзотика - предварительно уточните команду.

    Всё.

    Можно добавить lvm, вся разница что между 2 и 3 пунктом добавятся pvresize и lvresize. Либо, по желанию, можно будет создавать дополнительные разделы (и/или диски) и их добавлять в lvm.
    lvm поможет, если вы решили сделать отдельный раздел под ОС и отдельный под данные, а потом поняли, что раздел ОС сделали слишком маленьким.

    PS: "Виртуальная машина, не особо важно под каким будет гипервизором" - не все гипервизоры могут корректно оповестить гостевую систему об изменении блочного устройства, для некоторых нужен рестарт виртуалки.
    Ответ написан
    4 комментария
  • Как сделать правильный комплексный индекс?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Надо найти самую старую по обновленности запись, где n_flag=0 и num_status>=10.

    btree(update_date) where n_flag=0 and num_status>=10
    Ответ написан
    1 комментарий
  • Реален ли хостинг на процессорах с частотой 5ггц?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Уже очень давно больше не существует понятия "процессор работает на постоянной частоте". Это величина динамическая по усмотрению самого процессора. Максимум того что осталось доступным - можно попросить более или менее агрессивную политику энергосбережения. А частотой всё равно будет управлять сам процессор.

    CPU с базовой частотой в 5ггц банально не представлено серийных, а Turbo Boost или аналоги - у них нет постоянной частоты. CPU загружен? CPU сбрасывает частоту чтобы уложиться в заданное тепловыделение или чтобы избежать перегрева. CPU не загружен? Понижаем частоту до минимума вплоть до обесточивания части ядер. CPU загружен умеренно - ок, повысим частоту сверх насколько захочется самому CPU. CPU загружен короткими всплесками (то есть типичная нагрузка от веба, что бекенда, что на стороне баз данных) - да ну нафиг частоту повышать, думает процессор. И не повышает.
    Ответ написан
    1 комментарий
  • Можно ли ограничить доступ usb-носителей с исключениями штатными средствами?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    поройтесь в сторону udev, например
    https://wiki.gentoo.org/wiki/Allow_only_known_usb_...
    https://unix.stackexchange.com/q/63199

    Конечно, это не имеет смысла если у пользователя есть рутовые права либо возможность их получить.
    Ответ написан
    1 комментарий
  • Как убрать readonly в Postgresql?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Postgresql вам редактировать и не препятствует. Раз вы смогли сделать create table - значит база не в read only режиме. Напишите соответствующий update и выполните.

    А вот вашему GUI клиенту скорей всего не нравится отсутствие primary key.
    Ответ написан
    Комментировать
  • Как перенести работающую ОС Debian 11 на RAID1 с имеющейся LVM разметкой?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Решили что следующая схема распределения объема HDD будет наиболее подходящей:
    SWAP - RAID1 - 5Gb
    / - RAID1 - 24Gb
    /home - RAID5 - все оставшееся место

    не трогаете sda вообще на данном этапе!

    Вы забыли /boot упомянуть, предположу что считаем его как гигабайтный раздел без существенных изменений.
    Игнорируем разметку sda полностью, делаете таблицы разделов на sd[bcd] как
    1MiB bios_grub
    1GiB boot
    29GiB sys
    всё остальное data

    mdadm -C /dev/md0 -l 1 -n 4 missing /dev/sdb2 /dev/sdc2 /dev/sdd2
    mdadm -C /dev/md1 -l 1 -n 4 missing /dev/sdb3 /dev/sdc3 /dev/sdd3
    mdadm -C /dev/md2 -l 5 -n 4 missing /dev/sdb4 /dev/sdc4 /dev/sdd4 # другие опции по вкусу

    ждёте resync, обновляете mdadm.conf, отправляете железку в ребут для проверки что массивы корректно собираются сами.

    pvinit, vgextend новых md1 и md2 в имеющийся LVM
    pvmove root и swap на md1, хомяка на md2

    umount /boot , dd if=/dev/sda2 of=/dev/md0, grub-install /dev/sdb , grub-install /dev/sdc , grub-install /dev/sdd, обновить fstab вместо sda2 записать md0

    контрольный ребут

    vgreduce sda3 из lvm, удаляете таблицу разделов sda и создаёте новую идентичную прочим дискам,
    mdadm /dev/md0 -a /dev/sda2
    mdadm /dev/md1 -a /dev/sda3
    mdadm /dev/md2 -a /dev/sda4

    после resync всё готово. Через lvresize расширить размеры томов ну и resize2fs как обычно.
    Ответ написан
  • Насколько упадет скорость жёсткого диска при подключении к SATA 2?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Никак не изменится.
    Даже на последовательных операциях механическим дискам далеко до пределов SATA II. А уж чуть только появятся задачи случайного чтения/записи - то и пределы SATA I будут очень далеко и крайне избыточны.
    Ответ написан
    Комментировать
  • Почему в разных типах файлывых систем (ext, btrfs, ntfs) сжирается место по разному?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    ext4 по-умолчанию резервирует место (5%) доступное только для рута. Регулируется ключами
    tune2fs -m N /dev/disk
    mkfs.ext4 -m N ...
    Ответ написан
    2 комментария
  • Почему Postgres не завершает IDLE-транзакции?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    idle != idle in transaction. Это принципиально разные статусы.

    Как вы сами написали, пул соединений у вас на приложении. Поэтому это именно к приложению вопрос, что вы делаете с библиотекой неверно, если на каждый запрос та пытается открывать новое соединение к базе, вместо использования свободного соединения из своего пула.

    В частности, где вызов release()?
    Ответ написан
    2 комментария
  • Оператор BETWEEN для диапазона значений?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    close_price between open_price * 0.9 and open_price * 1.1

    вы имеете в виду простую математическую операцию?
    Ответ написан
    Комментировать
  • Как задать название таблице переменной в postgresql python?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Привести схему данных в нормальную форму. (это термин)
    Затем удивительным образом пропадёт вся проблема как таковая.
    Ответ написан
    Комментировать
  • В чём разница между Postgre SQL и Postgre Pro?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Это две разные СУБД.

    postgres pro - местный закрытый форк свободной postgresql.
    Ответ написан
    Комментировать
  • Как создать нового юзера и новую базу в postgres, на убунту?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Парольная аутентификация лишь один из множества доступных вариантов. Хотя наиболее простой и распространённый. Какой способ аутентификации будет требовать СУБД - зависит от списка правил в pg_hba.conf. Очень редко нужно что-то кроме служебного правила peer для postgres (именно из-за него psql после sudo -iu postgres не спрашивает никакие пароли, но только у postgres'а) и md5 для всего остального.

    Базово создание новой базы с отдельным пользователем-владельцем выглядит так (от суперпользователя базы):
    CREATE USER "$NEWOWNER" PASSWORD '$NEWPASS';
    CREATE DATABASE ${NEWDB} OWNER "$NEWOWNER";
    REVOKE ALL ON DATABASE $NEWDB FROM public;


    В соседнем ответе вам неверно подсказывают, что "можно сразу указать какому юзеру разрешен доступ". create database разрешит доступ всем (но именно подключение к базе, а не ко всему внутри базы - что частая проблема непонимания прав). И имеет смысл наоборот отобрать доступ от всех прочих, т.е. от public. Owner, конечно, доступ сохранит.

    Чуть ближе к production имеет смысл использовать такой шаблон:
    CREATE USER "$NEWOWNER" PASSWORD '$NEWPASS';
    CREATE DATABASE ${NEWDB} OWNER "$NEWOWNER";
    CREATE ROLE ${NEWDB}_role;
    CREATE ROLE ${NEWDB}_ro;
    CREATE ROLE ${NEWDB}_rw;
    GRANT ${NEWDB}_role TO ${NEWDB}_ro, ${NEWDB}_rw;
    REVOKE ALL ON DATABASE $NEWDB FROM public;
    GRANT CONNECT ON DATABASE $NEWDB TO ${NEWDB}_role;
    GRANT ${NEWDB}_rw TO "$NEWOWNER";
    \c $NEWDB
    ALTER SCHEMA public OWNER TO "$NEWOWNER";
    REVOKE ALL ON SCHEMA public FROM public;
    GRANT USAGE ON SCHEMA public TO ${NEWDB}_ro, ${NEWDB}_rw;
    ALTER DEFAULT PRIVILEGES FOR ROLE postgres GRANT SELECT ON SEQUENCES TO ${NEWDB}_ro;
    ALTER DEFAULT PRIVILEGES FOR ROLE postgres GRANT SELECT,USAGE ON SEQUENCES TO ${NEWDB}_rw;
    ALTER DEFAULT PRIVILEGES FOR ROLE postgres GRANT SELECT ON TABLES TO ${NEWDB}_ro;
    ALTER DEFAULT PRIVILEGES FOR ROLE postgres GRANT SELECT,INSERT,DELETE,UPDATE ON TABLES TO ${NEWDB}_rw;
    ALTER DEFAULT PRIVILEGES FOR ROLE "$NEWOWNER" GRANT SELECT ON SEQUENCES TO ${NEWDB}_ro;
    ALTER DEFAULT PRIVILEGES FOR ROLE "$NEWOWNER" GRANT SELECT,USAGE ON SEQUENCES TO ${NEWDB}_rw;
    ALTER DEFAULT PRIVILEGES FOR ROLE "$NEWOWNER" GRANT SELECT ON TABLES TO ${NEWDB}_ro;
    ALTER DEFAULT PRIVILEGES FOR ROLE "$NEWOWNER" GRANT SELECT,INSERT,DELETE,UPDATE ON TABLES TO ${NEWDB}_rw;

    В результате получим:
    - пользователя-владельца базы, который предназначен выполнять всякие миграции схемы данных
    - роль имя_базы_role которую можно давать другим пользователям для возможности подключения к этой базе, но без доступа к таблицам приложения (например, используем для мониторинга)
    - роль имя_базы_ro которая даст select-only права ко всем (в том числе будущим) таблицам, созданным от пользователя-владельца это базы
    - роль имя_базы_rw - соответственно для выполнения select,insert,update,delete
    Ответ написан
    Комментировать