Задать вопрос
  • AMD или Intel для программиста и (иногда) игрока?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    иногда есть фризы, например, если открыть пхпшторм, который я уже 2 часа не открывал, или резко перейти с него на фотошоп

    Внимательно посмотрите на свой swap.

    Процессору глубоко фиолетово на переключения активных задач. У него и так постоянные смены контекста по много тысяч раз в секунду. Потому что даже системных процессов запущено больше чем существует ядер.
    Ответ написан
    4 комментария
  • На сколько хорош данный roadmap для PostgreSQL DBA?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Его написал мой коллега https://github.com/kamranahmedse/roadmap.sh/pull/196 Алексей Лесовский после сбора фидбека со всей нашей команды DBA. Так что вряд ли раскритикую год спустя.

    "конца" у roadmap нет. troubleshooting и optimization бесконечны. А уж тем более необъятна hackers тематика.

    Если заходить со стороны разработки - создайте маленькую базу неважно какой тематики (да хоть q&a сервиса), заполните сгенерированными данными гигабайт на 10-100 и заставьте это шевелиться за вменяемое время под синтетической нагрузкой (хоть pgbench). А потом начните менять схему данных, не останавливая нагрузку. А потом восстановить базу на состояние до миграции из бекапа.
    Ответ написан
    Комментировать
  • Как открыть все базы в postgresql?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Но в pgadmin4 новой таблицы нет

    Посмотрите в базе под названием postgres.

    Иначе говоря, где вы после CREATE DATABASE private_db переподключаетесь к этой новой созданной базе?
    Ответ написан
    Комментировать
  • Стоит ли покупать NVIDIA GeForce 8800 GT 512mb в 2021 году?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Оооо, G92, 2007 год, доллар по 25 рублей...
    В 2021 году таких живых уже не осталось. Уже лет 10 назад видеокарты на этом чипе надо было очень аккуратно изучать, чтобы не купить зомби. (отвал чипа, "ремонт", продажа, снова труп через пару месяцев работы)
    Ответ написан
    Комментировать
  • По какой причине могла дать сбой база - terminating connection because of crash of another server process?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Кончилось место на диске, OOM, или даже segfault при очень большом везении. Найдите в логе базы подробности, они будут перед всеми "terminating connection because of crash of another server process"
    Ответ написан
    Комментировать
  • Как проверить последний используемый слот репликации postgresql 14?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Подумать над вопросом "зачем". Возьмите для имени слота лучше что-нибудь более предсказуемое, будет проще в скрипте и удобнее в сопровождении. Например, hostname этой реплики.

    Ну если хочется делать неудобно - берёте slot_name из pg_replication_slots, обрезаете ненужное, приводите к числу
    Ответ написан
    1 комментарий
  • Как вставить fk на запись, добавленную в этой же транзакции?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    это происходит в одной транзакции и видимо данные еще не видны

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

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Доступ к DB Read Only. Т.е. после сдачи сервера в эксплуатацию DB не меняется.

    Поиск нужной записи по одному ID.

    При старте приложения загрузить в память приложения хоть из рядового csv или чего угодно ещё.
    При этих ограничениях задачи внешняя БД избыточна.
    Ответ написан
    5 комментариев
  • Откуда появляется бесконечный цикл?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Давайте вы лучше расскажете почему вы считаете, что здесь рекурсии нет.

    Вы делаете
    INSTEAD OF DELETE ON all_abonents

    и в этом триггере DELETE FROM all_abonents WHERE - почему же это не должно уходить в бесконечную рекурсию?

    Чем налагать спорные ограничения на действия из триггеров, postgresql будет послушно выполнять рекурсивные вызовы до исчерпания стека, а предоставлять условия выхода из рекурсии - задача разработчика.
    Ответ написан
    1 комментарий
  • Как переписать данный код для версий PHP ниже 7.4?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Если ключи сохранять не требуется, то и вовсе
    $res = array_column($page_data, 'tab');
    Ответ написан
    Комментировать
  • AMD EPYC NVMe RAID - решение?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Программный linux raid.
    Что помимо простоты будет ещё и работать быстрее. Без шуток. Хорошим SSD упереться в производительность аппаратного RAID контроллера не так уж сложно.
    Ответ написан
    Комментировать
  • Почему cron запускается не по локальному времени?

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

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Запустится следующий
    Ответ написан
    Комментировать
  • Как быстро удалить Foreign Table в postgres?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Не могу удалить foreign table из postgres запросом

    Посмотреть в pg_blocking_pids, кто мешает. Сделать с этими соединениями что-нибудь (pg_terminate_backend, например)

    Если делать элементарный запрос SELECT * FROM fwd_orders LIMIT 500, то все исполняется за 600ms . А если в этот запрос добавить любой ORDER BY, то выполнение запроса идет 10 и более минут (в таблице более 20млн. строк). Почему так происходит? И как можно ускорить работу?

    Посмотреть explain (verbose) на предмет того, что считается локально, а что прокидывается на удалённую базу.
    В частности, уточнить у используемого расширения oracle fdw, реализован ли там push-down для order by. По описанию похоже что нет такого и потому вся таблица вычитывается и сортируется локально.
    Ответ написан
    Комментировать
  • Почему возникает ошибка "Final statement returns bigint instead of integer" в SQL функции?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Не соответствуют типы данных как они объявлены в выходных параметрах функции и тем, что вы пытаетесь делать в return. Должны соответствовать друг другу.

    sum у нас в pg13 существуют такие:
    melkij=> \da pg_catalog.sum
                                                  Список агрегатных функций
       Схема    | Имя | Тип данных результата | Типы данных аргументов |                     Описание                     
    ------------+-----+-----------------------+------------------------+--------------------------------------------------
     pg_catalog | sum | numeric               | bigint                 | sum as numeric across all bigint input values
     pg_catalog | sum | double precision      | double precision       | sum as float8 across all float8 input values
     pg_catalog | sum | bigint                | integer                | sum as bigint across all integer input values
     pg_catalog | sum | interval              | interval               | sum as interval across all interval input values
     pg_catalog | sum | money                 | money                  | sum as money across all money input values
     pg_catalog | sum | numeric               | numeric                | sum as numeric across all numeric input values
     pg_catalog | sum | real                  | real                   | sum as float4 across all float4 input values
     pg_catalog | sum | bigint                | smallint               | sum as bigint across all smallint input values

    Как видно, нет ни одного варианта, который бы возвращал int4

    Final statement returns too many columns действительно надо пояснять? Или прямым английским языком всё и так уже сказано?
    Ответ написан
    3 комментария
  • Как отправить картинку POST в формате multipart/form-data?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Всё равно ведь используете curl для запроса. Попросите curl и сформировать корректное тело запроса.
    https://www.php.net/manual/en/curlfile.construct.php
    Ответ написан
  • Как залогировать дату последнего создания MATERIALIZED VIEW?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Вопрос в заголовке и вопрос в описании - два совершенно разных вопроса.

    Аналогично прочим командам, на вопрос был ли выполнен запрос, отвечает PQresultStatus. Нужно уточнять у вашей библиотеки подключения, как проверить статус команды. Во многих случаях всё просто - если метод вернул управление (а не бросил исключение) - команда выполнена.
    Ответ написан
    Комментировать
  • Нужно ли удалять индексы перед изменением их типа?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    У индекса нет возможности изменения типа. Ни самого типа индекса (btree, hash, gin, gist) ни типов полей.
    Нужно сначала создавать новый индекс, затем удалять старый. Имена индексов при этом должны будут различаться. Сначала удалить, потом построить новый - чревато развлечениями на production, когда на время построения нового индекса уже нет старого индекса и потому ранее быстрые запросы едят 100% cpu и диска, превращая задачу построения нового индекса во что-то около невозможное. На dev машине, конечно, без разницы.

    Просто работаю через Valentina Studio и не совсем понятно что происходит под капотом.

    Сделайте log_statement = all (или ddl) - и увидите в логе базы, что приложение делает. Бывает полезно не только с gui всякими, но и с чрезмерно "умными" orm.
    Ответ написан
    Комментировать
  • Возможна ли проверка условия внутри ON CONFLICT DO UPDATE?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Описание синтаксиса весьма красноречиво намекает о реализации
    DO UPDATE SET ... WHERE condition

    melkij=> create temp table foo (item int primary key, d date, price numeric);
    CREATE TABLE
    melkij=> insert into foo values (1, '2021-07-30', 100) on conflict (item) do update set price = excluded.price, d = excluded.d where excluded.d > foo.d;
    INSERT 0 1
    melkij=> table foo;
     item |     d      | price 
    ------+------------+-------
        1 | 2021-07-30 |   100
    (1 строка)
    
    melkij=> insert into foo values (1, '2021-08-01', 110) on conflict (item) do update set price = excluded.price, d = excluded.d where excluded.d > foo.d;
    INSERT 0 1
    melkij=> table foo;
     item |     d      | price 
    ------+------------+-------
        1 | 2021-08-01 |   110
    (1 строка)
    
    melkij=> insert into foo values (1, '2021-07-20', 80) on conflict (item) do update set price = excluded.price, d = excluded.d where excluded.d > foo.d;
    INSERT 0 0
    melkij=> table foo;
     item |     d      | price 
    ------+------------+-------
        1 | 2021-08-01 |   110
    (1 строка)
    Ответ написан
    Комментировать
  • Как в си узнать какой пользователь вошёл в систему linux?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Если это подходит для postgresql, то, вероятно, подойдёт и для вас: https://github.com/postgres/postgres/blob/REL_13_S...

    (geteuid + getpwuid под linux)
    Ответ написан
    Комментировать