Задать вопрос
  • Как перенести большую базу с одного сервера на другой?

    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) индекс - это индекс, которого достаточно для ответа на запрос вовсе без обращения к самой таблице. В самом индексе хранится достаточно данных для ответа на запрос и, хоть и возможно по индексу достать всю строку данных - это просто не нужно. За счёт того, что не нужно дёргать непосредственно таблицу, а ответить можно используя только индекс - покрывающие индексы несколько быстрее (насколько - зависит от дисков, кэша и объёма горячей части базы). Но при этом, разумеется, сам индекс становится больше и злоупотреблять этим не нужно.
    Ответ написан
    Комментировать
  • Как правильно хранить таблицы для быстродействия?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    В c/c++ - менее 0.1 сек. Необходимо реализовать структуру таким образом, чтобы все запросы выполнялсь со скоростью с.

    Адаптируйте свою реализацию алгоритма в UDF
    https://dev.mysql.com/doc/refman/5.7/en/adding-udf.html
    Ответ написан
    4 комментария
  • Почему идёт потеря пакетов на bridge lxc?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    bridge в mtr не будет виден в принципе, т.к. не является маршрутизатором.
    Выясните, кто вашу подсеть маршрутизирует и как это устройство настроено на обработку ICMP. Вполне может быть настроено отбрасывать ICMP и не отвечать на echo запросы, это допустимое поведение. не влияющее на tcp и udp.
    Ответ написан
    Комментировать
  • Как реализовать отношения?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    В простом случае в users_roles будет первичный ключ на 3 поля: user_id (fk), role_id (fk), project_id (fk)
    Приключения будут если потребуется сделать глобальную суперроль на все проекты. Можно сделать users_roles для глобальных прав и отдельно users_project_roles для дополнительных прав на конкретные проекты.
    Ответ написан
  • Текст в первичном ключе и его переиндексация?

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

    При этому line иногда плавает.

    Проверьте память. Физическую на сервере. Подозрение что косячит.
    И диски тоже проверьте.
    Потому что есть всего одно место, где можно поймать "compressed data is corrupted" и связано оно с распаковкой сжатых данных из toast. reindex тоже говорит, что прочитано что-то совсем не то, что предполагалось.
    Ответ написан
  • В какой папке находятся созданные таблицы PostgreSQL?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    поэтому проще будет найти файлы и все попереносить.

    И так делать нельзя и ничего кроме бесполезного файлика с бинарным мусором вы в резуультате не получите.
    Прочитать данные из raw файлика, а уж тем более подсунуть его в другую базу - очень сильно замучается даже опытный DBA, способный читать и понимать исходный код postgresql (это кстати минимальное требование к тому чтобы что-то достать из сырого файлика таблицы).

    Потому что директория базы PostgreSQL - это один неделимый объект (плюс tablespace, которые отделять тоже нельзя от данных кластера). Для чтения данных из файлов таблицы (их много может быть) нужен системный каталог, нужен toast (если был создан), нужны clog и xlog чтобы понять, а что мы собственно в этом файлике видеть должны, а что просто ещё не вычистил вакуум.

    Если вам нужны данные из конкретной таблички - сделайте логический снимок таблички уже упомянутым pg_dump.
    Ответ написан
    Комментировать
  • Как сделать сортировку рекурсивного запроса в postgresql?

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

    Может лучше ваш список смежности вовсе заменить на штатное материализованное представление ltree?
    Ну или во всяком случае на него можно заменить ваши массивы.
    Ответ написан
    1 комментарий