Задать вопрос
  • Как свзять столбцы по внешнему ключу?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Corresponding columns in the foreign key and the referenced key must have similar data types. The size and sign of fixed precision types such as INTEGER and DECIMAL must be the same.

    https://dev.mysql.com/doc/refman/8.4/en/create-tab...
    Ответ написан
    Комментировать
  • Почему не удается авторизоваться под юзером postgres?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    # DO NOT DISABLE!
    # If you change this first entry you will need to make sure that the
    # database superuser can access the database using some other method.
    # Noninteractive access to all databases is required during automatic
    # maintenance (custom daily cronjobs, replication, and similar tasks).
    #
    # Database administrative login by Unix domain socket
    local   all             postgres                                peer
    
    # TYPE  DATABASE        USER            ADDRESS                 METHOD
    
    # "local" is for Unix domain socket connections only
    local   all             all                                     peer
    # IPv4 local connections:
    host    all             all             127.0.0.1/32            scram-sha-256


    по умолчанию ubuntu создаёт примерно такого смысла pg_hba.conf

    Обращу отдельное внимание, что первой строкой идёт peer авторизация именно для postgres'а и это будет плохая мысль её ломать.

    sudo -u postgres psql
    здесь вы зашли от unix пользователя postgres и запустили psql, имя unix пользователя совпадает с именем пользователя базы - это достаточное условие для прохождения peer аутентификации, вы получили доступ к базе. Это обычный вариант использования суперпользователя базы (dba впрочем чаще делают sudo -iu postgres, т.к. нужен не только psql)

    sudo psql -U postgres -d testdb
    Здесь вы хотите запустить psql от рута и авторизоваться пользователем postgres. "postgres" != "root", поэтому peer аутентификация не пускает авторизацию. То что root это root операционной системы не очень интересует postgresql, делает то что сказано в pg_hba (и pg_ident, но это тема отдельного обсуждения)
    sudo здесь совершенно лишний и не выполняет никакого смысла.

    Изменение
    host all all 127.0.0.1/32 md5
    эффекта не имеет, потому что host тип подключения для TCP/IP подключений, а по-умолчанию psql подключается по unix sock.
    psql -h 127.0.0.1 форсирует подключение по TCP/IP

    задал пароль вручную через passwd, проверил - зашел пользователем postgres через ssh - пускает

    Пользователь ОС не имеет отношения к пользователю внутри СУБД, это разные сущности.
    Пароль postgres пользователя базы можно изменить через psql командой \password

    Тем не менее,
    sudo -u postgres psql
    достаточно для административного доступа. Не работайте от суперпользователя постоянно.
    Ответ написан
    Комментировать
  • Какое отставание MySQL Slave от MySQL master считать проблемным?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Начать желательно с документации. https://dev.mysql.com/doc/refman/8.4/en/show-repli...
    То есть вы неверно понимаете эти значения.
    SQL_Delay

    The number of seconds that the replica must lag the source.

    SQL_Remaining_Delay

    When Replica_SQL_Running_State is Waiting until SOURCE_DELAY seconds after source executed event, this field contains the number of delay seconds remaining. At other times, this field is NULL.


    SQL_Delay - это намеренная задержка репликации как минимум на такой срок: https://dev.mysql.com/doc/refman/8.4/en/replicatio...
    SQL_Remaining_Delay показывает сколько времени осталось ждать до применения следующей транзакции, только в том случае когда мы ждём сконфигурированную задержку репликации. timestamp выполнения транзакции на источнике мы заведомо знаем, до него и показывается остаток.

    И то и другое отображает намеренно сконфигурированное администратором поведение и поэтому не может быть проблемой по своему определению.
    Ответ написан
    2 комментария
  • Как обнаружить все битые таблицы?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Масштаб проблемы: критично, этим кластером (в терминах postgresql) пользоваться нельзя. Разбираться с тем как делаются бекапы, как восстанавливались и где именно сделали неверно. Системный каталог не соответствует файловой системе. Можно ожидать любые аномалии помимо отличий relfilenode. Например, полностью сломанный mvcc.

    Если нужны какие-то данные из конкретно этого ошибочного бекапа - копировать адресно всё что читается по каждой интересующей базе и таблице. Затем внимательно проверять, имеют ли прочитанные данные какой-то смысл.
    Ответ написан
    3 комментария
  • Куда исчезают записи в базе данных mariadb, innodb?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Никуда.
    Вы смотрите на, по своему определению, приблизительное значение. 700к или 900к - значения одного порядка, допустимая флуктуация для статистики планировщика.

    об этом раньше было отдельная сноска в интерфейсе phpmyadmin, не знаю как сейчас. Никто не пересчитывает всю таблицу, чтобы узнать, 895342 там записей или 902542 записей.
    Ответ написан
    Комментировать
  • Почему у Athlon II X2 215 и Athlon II X2 280 одинаковое энергопотребление в нагрузке?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    А вы неверно понимаете TDP. Это не "равно" такому-то тепловыделению, а "не выше". При том, это ещё и не в теоретическом пике, а в некотором удобном производителю тесте.
    По задумке должно было использоваться как справочная величина для выбора системы охлаждения.

    Протестировали партию кристаллов единообразно, все пригодны к работе на 3,6ГГц и не превышают тепловыделение в нашем тесте - произвольно из этой партии распределили кристаллы и отгрузили промаркировав в соответствии с планом отгрузок. Унификация производственных процессов, снижение себестоимости.
    Ответ написан
    Комментировать
  • Есть ли в PHP оптимизация при передаче массива по значению?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Да, есть. Подробнее см. устройство zval
    Ответ написан
    Комментировать
  • Какая минимальная конфигурация пк подойдёт для домашнего сервера?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Любая.

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

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Отсутствие реакции на SIGTERM при продолжающемся потреблении CPU это примечательно. Но без -dbgsym и GDB ничего определённого выяснить фактически не удастся. Суть - как-то попали в какую-то ветвь кода, которая не считалась что может занимать продолжительное время и вызов обработчика сигналов CHECK_FOR_INTERRUPTS там не был предусмотрен. Из вариантов навскидку где возможно в 16.х наступить - dblink или fdw, create index using hash. Традиционно, ещё могут быть index scan по gin или gist, не в первый раз находятся у них такие грабли.
    Как минимум, удостовериться, что используется свежая минорная версия. Завтра 16.9 выходит.

    Ну, это из предположения что весьма подозрительный watchdog: BUG: soft lockup тут ни при чём. Что это такое я вряд ли подскажу. Выглядит нехорошо.

    Такс, это всё про оставшийся процесс.
    Про сам the database system is shutting down
    При crash recovery делается immediate stop, все backend которые не завершаться за 5 секунд получат SIGKILL. Который, естественно, проигнорировать уже не могут, потому что процессу про SIGKILL никто даже и не скажет, его просто снимет ядро ОС.
    Значит, перед всеми the database system is shutting down был received smart shutdown request или received fast shutdown request, который кто-то скомандовал явным образом. Оба режима штатного выключения не делают SIGKILL, а именно дождутся корректного завершения процесса. В случае с багом, когда процесс не отреагировал на SIGTERM, ну, вечно ждать и будет. Других вариантов кроме SIGKILL тут нет.

    Если логи ещё сохранились на дату shutdown request - то смотреть что там делали с системой, что кто-то скомандовал stop или restart базе. Если не вмешательство администратора, то может быть какой-то аналог unattended-upgrades?
    Ответ написан
    Комментировать
  • С чего начать изучение инженерной части БД?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Transactional Information Systems, by Gerhard Weikum and Gottfried Vossen, Morgan Kaufmann
    Ответ написан
  • Как временно повышать права пользователю?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    security definer и есть: проверка прав вызова функции (grant execute) будет проверять, может ли её вызвать этот пользователь, но сама функция дальше будет выполняться с правами владельца функции. В том числе с правами супера, если владелец - суперпользователь.

    Не забудьте revoke execute on function .. from public;
    begin;
    create role specific_activity;
    create function stat_activity() .. security definer;
    revoke execute on function stat_activity() from public; -- права на запуск не всем
    grant execute on function stat_activity() to specific_activity; -- а только этой роли
    commit;
    grant specific_activity to someuser;


    btw, для pg_terminate_backend есть предопределённая роль pg_signal_backend.
    Ответ написан
    1 комментарий
  • Как исключить первую запись в базе данных?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    offset 1 при небольших значениях offset самое адекватное

    PS: mysql_query? перепроверил какой нынче год в календаре
    Ответ написан
    1 комментарий
  • Драйвера на видеокарты AMD стабильные?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Вот так и 20 лет назад на стабильность драйверов ATI жаловались в основном пользователи nvidia. Как так, почему - тайна скрытая мраком, маркетингом и фанатиками.

    Где-то с 2011 года я, получается, непрерывно пользуюсь AMD GPU на десктопе. Никаких проблем от видеодрайвера у AMD под linux. А уж после закапывания fglrx и установка сократилась до одного non-free пакета с firmware.
    Ответ написан
    Комментировать
  • Нужен ли реально фаервол?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    открываете свой ss -lutnp и изучаете, точно ли вы хотите это всё выставлять доступным извне.

    Вернее лучше сказать так - могут ли быть какие-нибудь слушающие порты каких-нибудь программ, способных уничтожить систему или слить данные удаленно?

    вероятность RCE ненулевая, не говоря уж о том же ssh с разрешённой парольной аутентификации но слабым паролем
    Ответ написан
    Комментировать
  • Ошибка в запросе, в чём причина?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    SELECT [u.id](u.id)

    а где вы такой синтаксис нашли? Совершенно очевидно непонимание от сервера, что вы этим пытаетесь сказать, я тоже не понимаю, что этот синтаксис должен значить.
    https://dev.mysql.com/doc/refman/8.4/en/identifier...
    Ответ написан
    2 комментария
  • Как в PostgreSQL 16 преобразовать значение типа uuid в тип bytea?

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

    а так, универсально через промежуточное приведение к тексту ::text::bytea
    Ответ написан
  • Есть ли преимущества от удаления поля id при создании таблицы?

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

    Нет ничего удивительного в таблицах, у которых нет поля id. В предметной области может быть достаточно хороший естественный ключ.

    С точки зрения производительности - да, конечно, есть смысл не хранить ненужные данные. Меньше строка => меньше таблица => в тот же объём RAM влезает больше кеша и меньше IO. Немного, правда, чистыми 8гб на каждый миллиард строк получается всего для bigint. Но если поле больше ни для чего не нужно, то почему бы и нет?
    Ответ написан
    Комментировать
  • Как определить причины низкой производительности postgres?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Вы смотрите на совершенно бесполезный график. Смотрите на полезные.

    Если у вас табличка с 10 индексами и к ней select * from foo where id = ? - то это минимум 11 AccessShareLock. Совершенно логично, что чем больше параллельно нагрузки - тем больше вы увидите AccessShareLock. И дальше куда с этим? Вот и получается совершенно бесполезный график. А задирание max_connections сделает только хуже.

    Посмотрите график CPU, есть ли в принципе CPU свободный (помним что у вас наверняка есть HT, значит 100% утилизации недостижимы, реальный потолок окажется где-то в районе 70-90%)
    Посмотрите графики латентности IO. Если проседает латентность чтения или записи под нагрузкой - то это будет причина замедления. СУБД очень чувствительны к латентности.
    Дальше графики pg_stat_activity с разбивкой по state. Если растут idle in transaction - проверять как дела на приложении, а так же сеть.
    Конечно, графики по pg_stat_statements. top5 запросов по времени выполнения, для начала.
    И проверить наличие корреляции с графиком длительности самой старой транзакции.
    Ответ написан
    4 комментария
  • Отличие md5 от scram-sha-256 в pg_hba.conf postgresql?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Аутентификация через метод md5 выполнит парольную проверку как для пароля сохранённого с password_encryption = md5 (ныне уже deprecated, но встречается в большинстве баз, созданных не недавно), так и пароли сохранённые в scram-sha-256. Реализацию pg_hba md5 специально расширили при появлении scram-sha-256 таким образом, для облегчения миграции.

    Указание scram-sha-256 в pg_hba будет требовать именно пароль согласно scram-sha-256 и не будет принимать пароли старых учётных записей, созданных с md5 encryption.

    Вполне вероятно, что у вашей базы password_encryption сконфигурирован в scram-sha-256, все пользователи кто имеет пароли, так же в scram-sha-256 и нужды в md5 аутентификации в pg_hba нет.
    Ответ написан
    Комментировать