• Как быстрее записать в базу PosgresQl?

    Melkij
    @Melkij
    PostgreSQL DBA
    Быстрее всего - COPY запросом.
    При том, сразу из csv файла, локального к СУБД.

    Через приложение - сильно лучше тоже COPY. В PDO интерфейс для COPY, впрочем, ужасен.
    Хуже - относительно большими insert
    ещё хуже - кучей запросов в транзакции
    кучей запросов вне общей общей транзакции - очевидно будет очень медленно.
    Ответ написан
    Комментировать
  • Как решить ошибку SQLSTATE[57014]: Query canceled: 7 ERROR: canceling statement due to statement timeout"?

    Melkij
    @Melkij
    PostgreSQL DBA
    Ищите где выставлен statement_timeout. Такая ошибка именно по срабатывании этой настройки. И включать её надо намеренно. Так что ищите где ставится, от конфига СУБД, настроек базы и пользователя до руками сделанного set в приложении.
    Ответ написан
    Комментировать
  • Почему так мало соединений с базой данных на 1ГБ оперативной памяти?

    Melkij
    @Melkij
    PostgreSQL DBA
    Вот честно могу ответить - ни малейших представлений как можно абстрактно сказать, сколько памяти займёт client backend процесс базы.
    Это будет меняться от:
    - очевидно версии базы, плюс от компилятора и настроек сборки
    - session_preload_libraries, work_mem (к слову о work_mem - вы знаете, что один запрос может использовать несколько work_mem?), temp_buffers. Да ещё maintenance_work_mem для некоторых операций
    - величины системного каталога - как pinned таблиц, так и затем кэшированных при обращениях
    - выполняемых ранее запросов. Тот же кэш хранимых процедур у каждого backend свой

    Один backend вполне и десятки гб памяти может использовать и такие настройки может иметь смысл делать для, например, построения индекса.

    Помимо собственной private памяти на каждое активное соединение всё множество max_connections резервирует себе некоторое место в сегменте разделяемой памяти, независимо от того, сколько соединений вы затем используете.

    Чтобы админить калькуляторы и чайники обычно DBA не нанимают. Тем более если на том же самом калькуляторе помимо базы ещё и приложение отъедает непредсказуемо сколько памяти. Чего там от этого 1гб останется? Видимо даже shared_buffers с 128мб поднимать некуда, а то может и уменьшать придётся. Так что по опыту сложно что-то сказать о такой конфигурации.

    Скорей всего не трогайте max_connections. Оставьте дефолтные 100.

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

    Смотря какой пул и как работает приложение.
    pgbouncer в pool_mode = transaction вполне может свести пару сотен подключений к баунсеру на десяток коннектов в базе. Ну а 10 процессов базы будут использовать наверняка поменьше памяти чем 200.
    Для pool_mode = session - да, только сгладить стоимость fork годится.
    Ответ написан
    1 комментарий
  • Как получить даты, которые соответствуют названиям дней недели в Postgresql?

    Melkij
    @Melkij
    PostgreSQL DBA
    select day /*, ... */ 
    from tablename 
    join lateral generate_series(start_date, end_date, interval '1day') as day on true 
    where to_char(day, 'Day') = week_day


    если в лоб и у вашего week_day (который с весьма не ясной причиной хранится в varchar) написание совпадает с to_char.
    Ответ написан
    1 комментарий
  • Что это значит: $obj->{$b='dd'}?

    Melkij
    @Melkij
    PostgreSQL DBA
    Это странный способ написать:
    $b = 'dd';
    $obj->dd;
    Ответ написан
    7 комментариев
  • Как посмотреть соотношение каталогов и баз в PgSQL?

    Melkij
    @Melkij
    PostgreSQL DBA
    физически бэкапить определённые базы

    Не сможете.
    Ну в смысле скопировать отдельные файлы можете. А вот восстановить потом - нет. Никогда.
    Бекапить можно только целиком весь datadir, со всеми симлинками. Правильно объяснив базе что вы её бекапите и соблюдая ожидания базы по методу её бекапа чтобы из этого потом можно было восстановиться.

    А директории баз называются идентично полю oid в pg_database
    Ответ написан
    3 комментария
  • Почему не используется GIN индекс в Postgresql с установкой веса?

    Melkij
    @Melkij
    PostgreSQL DBA
    index (func1, func2) - это в корне не то же самое что func1 || func2
    Выражения для оператора разные, поэтому индекс отбрасывается как неподходящий.

    В общем случае фильтр по выражению может работать по индексу только построенному в точности по такому же выражению.
    Ответ написан
    6 комментариев
  • Как импортировать csv файл в postgresql?

    Melkij
    @Melkij
    PostgreSQL DBA
    Ответ написан
    Комментировать
  • Что означает индекс в выводе var_dump для объекта?

    Melkij
    @Melkij
    PostgreSQL DBA
    А вы про какую версию спрашиваете? Синтаксис var_dump для объекта выглядит как: https://github.com/php/php-src/blob/PHP-7.2/ext/st...
    %sobject(%s)#%d (%d) {

    В самом начале возможен символ & - если это ссылка.
    Второй %s - имя класса.
    следующий %d - идентификатор объекта
    последний %d - число свойств объекта

    Что немного не похоже на object(PDO)[1]. Да и не менялся формат уже давно.
    Ответ написан
    3 комментария
  • Как сочетать type и depth в команде find?

    Melkij
    @Melkij
    PostgreSQL DBA
    -depth Process each directory's contents before the directory itself.
    The -delete action also implies -depth.


    Это просто не тот параметр, который вы искали. Уровни вложенности это -maxdepth и -mindepth. То есть

    find -maxdepth 1 -type f
    Ответ написан
    3 комментария
  • Pg_basebackup, зависит ли скорость копирования от типа данных преобладающих в БД и можно ли как-то увеличить скорость копирования средствами postgres?

    Melkij
    @Melkij
    PostgreSQL DBA
    basebackup - это буквально копирование почти всего из PGDATA тупо на уровне файликов.
    Строго в один поток. (ну, на самом деле в отдельном потоке walreceiver ещё если wal method выставлен stream)

    Смотрите внимательнее куда упираетесь. Диск на чтение откуда снимаете? Диск куда пишете? Сеть? Одно ядро CPU на базе с которой снимаете? На которую пишете?
    Несколько гигабит занять в общем-то не проблема.
    Ответ написан
  • Где взять полный ликбез и роадмап по серверам nginx apache php-fpm и настройки сети и тд?

    Melkij
    @Melkij
    PostgreSQL DBA
    какие настройки имеет как управляется, что от чего зависит

    изучить вопрос от А до Я

    Непонятно почему вам для плана по оптимистичной оценке на 20 лет вперёд чем-то не нравятся ещё актуальные материалы 2014 года. Через 20 лет будет без разницы, изучали вы материалы 2019 или 2014 года, если вы все эти 20 лет не будете параллельно следить по крайней мере за release notes всего перечисленного.

    Начните с прочтения официальной документации. Настройки там должны быть все. Если вычеркнуть туманный пункт "настройки сети и тд" - то читать там уже и так достаточно надолго.
    Ответ написан
    Комментировать
  • Исключение PDO за номером 42601, как исправить?

    Melkij
    @Melkij
    PostgreSQL DBA
    СУБД однозначно отвечает, что не согласна с синтаксисом.

    Если не читать списки зарезервированных слов - то да, может быть не совсем очевидно почему этот запрос синтаксически неверен. Но тем не менее слово user всё равно зарезервировано и стандартами SQL и конкретной реализацией в postgresql. А потому не может использоваться в качестве unquoted идентификатора.
    Ответ написан
    1 комментарий
  • Enum что не так?

    Melkij
    @Melkij
    PostgreSQL DBA
    Я не знаю java, но где вы вообще передаёте 4 параметр в запрос?

    Ошибка говорит о том, что java по extended протоколу заявляет, что передаёт данные типа varchar, вместо типа gender. Да, для extended протокола это разные вещи и автоматически менять тип не будем.

    Попробуйте так:
    VALUES (?,?,?,cast(? as gender))
    Ответ написан
    1 комментарий
  • Код рабочий только когда имя не содержит пробелов. Имя находится в бд MySQL в чем проблема?

    Melkij
    @Melkij
    PostgreSQL DBA
    Начните проверять свой код.
    Где именно что-то идёт не так?
    Запрос в базу формируется корректный? Выведите его. Посмотрите на него. Подумайте, почему он получился неверен.
    Посмотрите, где потеряли часть данных. В вызываемом php скрипте? В ajax запросе? В js его формировавшем? Может быть в php скрипте, который выводит список? Или же сам HTML некорректен?
    Ответ написан
    7 комментариев
  • Как обеспечить отказоустойчивость БД Postgres?

    Melkij
    @Melkij
    PostgreSQL DBA
    как правильно обеспечить надежность и безотказность ее работы?

    Использовать адекватное железо и не мешать базе работать шаловливыми ручками.

    доступен 24 часа 7 дней в неделю.

    бекап

    Объясните, пожалуйста, как это по вашему мнению между собой связано?
    Бекапы необходимы, но как они связаны с высокой доступностью?

    в случае проблем с доступностью, перезапускать/запускать саму СУБД.

    Простой вопрос: зачем?
    Если база сложилась и даже не смогла подняться самостоятельно - значит проблема капительная и разбираться надо детально. Рестартом по кругу вы можете скорее сделать совсем плохо, чем что-либо починить.
    При том обычно проблемы начинаются от того что разработчики выкатили новую версию приложения и та начинает делать что-то странное. Например, забыли сделать индекс на 50гб табличку и засунули запрос с поиском по ней на главную сайта. Рестартом базы это, разумеется, не исправляется. А делает только больнее.

    Многолетней давности pg_postmaster_start_time() впечатлять не буду - мы периодически ставим минорные апдейты на свои базы. И вам тоже весьма рекомендую обновиться до 10.7 или лучше уже на следующих выходных сразу до 10.8.

    А так, если не трогать - то годами будет работать. Мониторинг и алерты от него, разумеется, нужны. Какая-то автоматика при наступлении алерта - обычно приносит куда больше головной боли, чем помогает.

    какие операции, запросы или их комбинации нежелательны для БД и могут привести к проблемам.

    Большая часть инцидентов с недоступностью сервиса с точки зрения приложения - про уровни блокировок. Кто-нибудь попробует сделать create index вместо create index concurrently и привет ожидание блокировки на всю запись в таблицу. Большинство форм alter table сюда же, но они и чтение заблокируют.
    Ответ написан
    Комментировать
  • В чем причины ошибки "Out of shared memory: You might need to increase max_locks_per_transaction"?

    Melkij
    @Melkij
    PostgreSQL DBA
    https://www.postgresql.org/docs/current/runtime-co...
    This parameter controls the average number of object locks allocated for each transaction; individual transactions can lock more objects as long as the locks of all transactions fit in the lock table. This is not the number of rows that can be locked; that value is unlimited. The default, 64, has historically proven sufficient, but you might need to raise this value if you have queries that touch many different tables in a single transaction, e.g. query of a parent table with many children.


    Не имеет отношения к размерам таблиц. Имеет отношение к размеру внутренней таблицы локов и количеству затронутых объектов (например, таблиц) в транзакции. Строго говоря: максимальное число локов объектов одновременно всеми активными транзакциями.
    Не имеет никакого отношения к shared_buffers (не вычитается из него, а прибавляется сверху. shared_buffers - строго буфер страниц, даже без учёта структур данных по управлению этим буфером. Сегмент разделяемой памяти всегда больше shared_buffers) или work_mem или чему-то ещё (кроме как max_connections + max_prepared_transactions). Тем более не имеет никакого отношения к дедлокам.

    Дефолтного значения обычно более чем достаточно. Может быть злоупотребляете партицированием.
    Ответ написан
    Комментировать
  • Может ли ClickHouse заменить Mysql?

    Melkij
    @Melkij
    PostgreSQL DBA
    Колоночная и реляционная базы. У них банально разные области применения
    Ответ написан
    Комментировать
  • Как записать образ карты пямяти с двумя разделами?

    Melkij
    @Melkij
    PostgreSQL DBA
    Если вам нужен образ всей флешки, то зачем вам копировать отдельно разделы? Копируйте всю флешку целиком.
    sudo dd if=/dev/mmcblk0 of=/media/root/Rasp_1.img bs=1M


    А если надо разделы в отдельности - то и копируйте их каждый в отдельности.
    Ответ написан
    Комментировать
  • Какой IT специалист занимается проработкой разделов Terms and Conditions и Privacy policy?

    Melkij
    @Melkij
    PostgreSQL DBA
    Юрист.
    Ответ написан
    Комментировать