Задать вопрос
  • Что не так в сортировке Wordpress/MySQL?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Обратите внимание на различное форматирование. У вас явно разные данные пишутся, в особенности проверьте пробельные символы.
    Сделайте
    select date, hex(date) from tablename;
    И по табличке ASCII сравните, что у вас в начале идёт лишнее
    Ответ написан
  • Что использовать: pgpool II или pgbouncer + haproxy?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    pgpool - это в общем больно в поддержке. Лучше не надо.
    Далее надо учитывать что автофейловер - это свой букет проблем и особенностей. И зачастую проблем от него больше, чем без него. Тест на понимание repmgr: "как именно выбирается новый мастер?". Обычно используется штатная потоковая репликация и мастер переключается вручную. Потому что основная сложность в определении, что надо переключаться, а не это кратковременный сбой, например, сети.
    pgbouncer + haproxy вполне широко используются для балансировки по равнозначным репликам (и по нескольким pgbouncer если вы до гигабита трафика доросли). По равнозначным - то есть не надо на OLTP реплики пихать OLAP запросы аналитики - для этого нужны отдельные реплики специально для этого настроенные.

    Упомянутый Александр Кузнецов patroni - во всяком случае я не смог спровоцировать его на split brain, поэтому в целом он мне нравится. Да и в паре мест в продакшене уже видел. Умеет и синхронные и асинхронные реплики, с haproxy дружит вполне штатно для опроса где нынче мастер и так авторами и используется.
    Ответ написан
    1 комментарий
  • Что такое РОЛИ в PostgreSQL?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    объясните, пожалуйста, смысл ролей в постгрес

    Пользователь - это алиас для системы ролей.

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

    Это ложь. Необходимости нет.

    Поэтому для созданного нами ранее пользователя с именем sammy соответствующая роль будет по умолчанию пытаться соединиться с базой данных sammy

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

    можно ли так: несколько ролей и одна база данных?

    Разумеется. Хоть дерево со множественным наследованием ролей.

    Только важный момент - роли глобальны в пределах кластера. Вы не можете сделать пользователя user в базе foo с одним паролем и пользователя user в базе bar с другим паролем. А вот дать readonly на одну базу и полные права на другую - это пожалуйста.
    Ответ написан
    1 комментарий
  • Почему не получается установить session.gc_maxlifetime?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Если к сессии ещё обращаются - значит кому-то она ещё нужна. Раз она кому-то нужна - почему её надо удалять?
    https://github.com/php/php-src/blob/PHP-7.2.2/ext/...
    Ответ написан
    Комментировать
  • Диск занят. Циклично читает sda и пишет на sdb - как найти причину?

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

    Гайки для управления скоростью синхронизации: /proc/sys/dev/raid/speed_limit_min и /proc/sys/dev/raid/speed_limit_max
    Ответ написан
    5 комментариев
  • Есть VPS, как узнать IPv6 адрес?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Должно же быть восемь четырёхзначных блоков, а не шесть

    Группы из одних нулей допустимо сокращать до ::
    Ответ написан
    4 комментария
  • Как перенести большую базу с одного сервера на другой?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Настраиваете потоковую репликацию, через pg_basebackup снимаете копию, запускаете как реплику. Когда догонит ведующую базу выключаете мастер и повышаете реплику до нового мастера.
    Даунтайм минута вне зависимости от объёма данных. Ну может ещё минута если понадобится рестарт мастера из-за смены wal_level, listen_addresses или max_wal_senders

    https://wiki.postgresql.org/wiki/Streaming_Replication
    Ответ написан
    Комментировать
  • Почему на ставиться ltree?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Вы что-то делаете странное. У вас какая версия postgresql?
    Если 9.1 и выше - то единственный верный способ ставить extension - это сказать create extension в нужной базе. Обычно нужны привилегии суперпользователя базы (обычно postgres на linux или pgsql на freebsd)

    Ругать на локаль - ошибка настройки самой ОС, к базе отношения не имеет.
    Ответ написан
  • Из-за чего ошибка POSTGRESQL процедуры?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Причина ошибки хранимки полностью и достоверно указана в подробностях текста ошибки:
    It could refer to either a PL/pgSQL variable or a table column.

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

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    А зачем вообще отправлять ошибку запроса на клиент?
    Ошибке запроса самое место в логе и только там. Клиенту - HTTP 500 и "извините, не шмогла" написанное любым вариантом какой вам понравится.
    Если требуется другое сообщение (или действие) для конкретной ошибки - ловите этот конкретный код ошибки. На допустимость логина обычно проверяют предварительным запросом, в апдейт on conflict пока не завезли. Плюс можно хапнуть advisory lock для устранения race condition и закатать всё в одну хранимку чтобы сэкономить на планировщике и сети.
    Ответ написан
    2 комментария
  • Какие запросы к бд mysql можно считать быстрыми и какие медленными?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Какие запросы к бд mysql можно считать быстрыми и какие медленными?

    Быстрые это те, время обработки которых не мешает пользователю/бизнесу/всем_причастным.
    Медленные - это соответственно те, которые мешают.

    0.06 sec в консоли - это 6 сотых секунды, конечно.

    Для веба значение имеет время рендеринга страницы пользователю. Хороший результат для backend'а - это 0,2 секунды на генерацию страницы. Это включая всё время обращений к кешам, базам данных и прочую логику построения страницы.
    Ответ написан
    Комментировать
  • Что означает тип данных/поля DECIMAL (MySql)?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    общее количество (а есть не общее?)

    да есть - число знаков после запятой.

    с которыми будет храниться данная величина (а может и не храниться?)

    Да, может не храниться. В частности - отбрасываться, округляться или выдавать ошибку переполнения.

    Как я понимаю, в этом поле должно хранится значение с 11 цифрами целой части и 10 дробной.

    Нет.
    11 знаков есть всего, из них 10 - для дробной части.

    И почему запись вида DECIMAL(9,10) вызывает ошибку

    Потому что число знаков после запятой не может быть больше общего числа знаков.
    Ответ написан
    Комментировать
  • Добавление и обновление записей через Insert Into?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    С insert или update по результату select (к слову, совершенно ненужному запросу) вы вляпываетесь в race condition
    on conflict специально сделан для нормальной сериализации происходящего и использоваться и должен. Другие способы сериализации race condition из времён до on conflict производительность просаживают по вполне очевидным причинам.
    Ответ написан
    2 комментария
  • Почему printf доводит строку до разной длины нулями в зависимости от языка на котором написана строка?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Варнинг в мануале для чего дан? php.net/manual/en/function.sprintf.php
    Warning Attempting to use a combination of the string and width specifiers with character sets that require more than one byte per character may result in unexpected results


    Потому что указание длины строки в printf работает в байтах, а не символах.
    Ответ написан
    Комментировать
  • В чем ошибка при установки ноты?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    could not find driver

    Скорей всего ошибка от PDO о том, что у вас не установлен модуль PHP с поддержкой запрошенной СУБД. Соответственно проверьте конфигурацию приложения, правильно ли указан DSN и конфигурацию PHP - установлен ли модуль для нужной СУБД.
    Ответ написан
    3 комментария
  • Postgresql запрос, сравнение полученных данных и перевод в секунды, как сделать?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    select extract(epoch from now() - MAX(DATE_OP)) seconds_ago from tablename;
    Ответ написан
    Комментировать
  • Kак взятье все date где year = 2017?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    where datefield >= '2017-01-01' and datefield < '2018-01-01'

    Или если несподручно считать следующую дату:
    where datefield >= '2017-01-01' and datefield < '2017-01-01' + interval 1 year


    Только не надо делать якобы простое where year(datefield) = 2017, который будет перебирать всю таблицу потому что в принципе не может использовать индексы.
    Ответ написан
    1 комментарий
  • Какое устройство ограничивает максимально используемый объем ОЗУ в материнской плате?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Контроллер памяти в процессоре и ограничивает. Datasheet на 19-20 страницах описывает поддерживаемые модули - модулей по 32гб каждый там нет, максимум процессор умеет 4 DIMM по 16гб каждый = 64гб.
    А на указанной материнской плате просто физически некуда вставлять столько памяти - слота всего два вместо 4, на которые рассчитан максимальный поддерживаемый объём.
    Ответ написан
    Комментировать
  • Насколько правильно использовать json для хранения данных в базе данных?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    json нужно использовать если у вам надо хранить json и сохранять полностью его форматирование. Форматирование именно самого json с пробелами, табами и переносами строк - т.е. как текст, но с валидацией что здесь именно json.
    если вам нужно хранить json - лучше использовать jsonb
    А для описанной задачи и просто массива достаточно, bigint[] или text[]. Контактные данные для заказа уместны именно в заказе, а по jsonb и массивам возможно вполне внятно и искать в том числе
    Ответ написан
    Комментировать
  • Для чего нужен покрывающий индекс?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Покрывающий (covering) индекс - это индекс, которого достаточно для ответа на запрос вовсе без обращения к самой таблице. В самом индексе хранится достаточно данных для ответа на запрос и, хоть и возможно по индексу достать всю строку данных - это просто не нужно. За счёт того, что не нужно дёргать непосредственно таблицу, а ответить можно используя только индекс - покрывающие индексы несколько быстрее (насколько - зависит от дисков, кэша и объёма горячей части базы). Но при этом, разумеется, сам индекс становится больше и злоупотреблять этим не нужно.
    Ответ написан
    Комментировать