Задать вопрос
  • Зачем в catch делать throw?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Если в catch больше ничего не происходит и нет finally - то такое перекладывание бесполезно.
    Ответ написан
    2 комментария
  • Centos7, как обновить postgresql с 9.2 до 10 версии?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Если база большая - pg_upgrade в link mode. В документации шаги вполне описаны. Желательно иметь реплику на всякий случай.
    Если база маленькая - pg_dumpall и импортировать в новую версию из дампа. Собственно всё просто: запустить новую базу на отдельном порту, снять дамп, залить дамп, остановить старую базу,, перезапустить новую на нужном порту.

    Просто запустить бинарники одной major версии на datadir другой major версии - не получится.

    Для обновления в пределах одного сервера нужны бинарники обеих версий СУБД. Инструкцию по установке уже расписал Alexey Dmitriev

    не ниже 10.1(на локалке у меня 10.1) или лучше ставить последнюю 12?

    10.11 минимум. Нечего тестировать давно закрытые ошибки.
    Ответ написан
    Комментировать
  • Есть ли в природе материнские платы с двумя сокетами LGA 1155?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Идём в спецификацию и читаем:
    Max CPU Configuration 1

    У них вообще нет линков для межпроцессорного взаимодействия. Емнип, как и контактов под это дело вообще у 1155 сокета - строго 1S сегмент.
    Ответ написан
    1 комментарий
  • Как разграничить видимость данных в таблицах Postgresql?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    RLS то что вы хотите услышать.

    Отдельный сервис между базой и неподконтрольными вам клиентами - то что вам необходимо сделать. База в мир открыта быть не должна. DoS делается довольно просто даже без знания паролей, а уж с доступом...
    Ответ написан
  • Postgres - не корректно работает SQL запрос(EXIST)?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Мне ещё со времён темы на sql.ru не хочется узнавать что это вы такое соорудили и зачем так сложно.

    Очень плохая мысль пытаться использовать одинаковые идентификаторы много раз. У вас либо весь запрос работает по принципу if exists subquery then взять все строки таблицы else пустое множество либо как-то переплетены между собой условия неочевидным образом из-за совпадения идентификаторов.
    Использовать exists как one-time filter в целом попробовать можно - но обычно exists по не коррелированному запросу есть ошибка.
    Ответ написан
  • Отличия pci-e 3.0 и pci-e 3.1?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Тут спецификации PCI-E 6.0 обратно совместимы со всеми предыдущими PCI-E включая 1.0, а вы о 3.0 vs 3.1...

    Да, должен работать.
    Ответ написан
    2 комментария
  • Возможно ли настроить "автопартицирование" в PostgreSql?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Нет.

    PS: такие мелкие партиции скорей всего ухудшат производительность.
    Ответ написан
    Комментировать
  • Почему pgadmin орет на dblink?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Вы запросили select *, затем сказали что record возвращаемые функцией соответствуют по структуре одному полю типа numeric.
    Всё, в самом прямом смысле
    query result rowtype does not match the specified FROM clause rowtype


    pgadmin вовсе ни при чём, на запрос закономерно удивляется сам postgresql
    Ответ написан
    4 комментария
  • Почему Micron RealSSD P400m 2.5 400GB SATA 6Gb/s столько стоит?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    На залежавшиеся железки бывают иногда неадекватные ценники.
    Для его родного 2013 года характеристики не самые плохие. Насколько ретроспективно могу сходу найти - конкурировать с intel DC S3700 хотели. Впрочем ценник в $1300 и тогда был бы неадекватен, не то что сейчас (каких-то MSRP не нашёл для ориентира).
    Ответ написан
    Комментировать
  • Как создать тип перечисления?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Чтож, зависит от того что именно вы хотите сделать.

    PostgreSQL позволяет сделать полностью собственную реализацию типа данных. Которая будет себя вести так как вы захотите - но всю эту логику вы должны разработать сами на C. Потому у create type и довольно объёмная документация.

    range типы - это диапазоны. Например, дата бронирования номера гостиницы. Таблица бронирований, одно поле с диапазоном дат tsrange и exclude constraint - всё, база проконтролирует, что даты бронирования не пересекаются.

    перечисления - это обычно подразумеваются enum. Но для вашей задачи это не подходит. enum - это фиксированный набор из строк.

    что-то похожее на штатные типы данных, но с ограничениями - вы хотели найти не create type, а create domain:
    CREATE DOMAIN smallint_between_10and200 AS smallint CHECK(value >= 10 and value < 200);

    Всё, теперь в таблицах вы можете использовать тип данных smallint_between_10and200, в который тем не менее записать что-то не из диапазона 10..200 будет невозможно.
    Ответ написан
    1 комментарий
  • Как проверить пустое ли поле?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Оператор сравнения в plpgsql такой же как в SQL. is null для проверки является ли значение null и = для равенства.

    Для изменения вставляемой строки вы должны модифицировать переменную new, а не пытаться уйти в бесконечную рекурсию выполняя аналогичную вызвавшему триггер операцию.
    Ответ написан
    3 комментария
  • Насколько дорогая SQL операция NOT IN/NOT EXISTS?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    В таблице items 12 млн записей, в using_items 11 млн. Разумеется количество гипотетическое и маловероятное.

    Да нагенерируйте и посмотрите explain analyze. Были бы действительно объёмы, а не всего-то десяток миллионов строк.

    not in дорог из-за требования стандарта по части обработки NULL в not in и отсутствии специальных оптимизаций для этого случая. Может быть оптимизация появится.
    not exists оптимален.
    через left join план может быть идентичным not exists
    Ответ написан
    Комментировать
  • Как распределить логи звонков по БД?

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

    Партицировать по месяцам, впрочем, вероятно будет полезно. Удалять целиком партиции банально проще. Только именно партицировать штатными средствами СУБД, а не грабли какие-то странные выдумывать.
    Ответ написан
  • Как json перевести в массив?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    По виду похоже на дважды закодированный json. То есть
    $out = json_decode(json_decode($var), true);
    Ответ написан
    Комментировать
  • PostgreSQL как посчитать количество ключей в JSON?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    select k, count(*) from tablename join  jsonb_object_keys(data) as k on true group by k

    ?
    Ответ написан
  • Как ускорить поиск?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Подумать, действительно ли нужен select *
    Если нет и нужно достать одно-два поля - запрашивайте только необходимые эти поля и добавьте их в индекс. В include для postgresql 11+ или в сам индекс после word. С учётом статичности самой таблицы будет index-only scan всегда.
    Если все нужны - то в принципе можно и в индекс вероятно загнать, но вряд ли в этом будет уже смысл.

    Можно ещё с hash-индексом попробовать если postgresql 10+. Но сомневаюсь.
    Ответ написан
    Комментировать
  • Как удалить строку из view таблицы в Postgresql?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Если материализованное view - то refresh materialized view
    Если не материализованное - то закешировано быть не могло. Смотрите определение view и исследуйте, откуда строка в резуультате этого запроса получается.
    Ответ написан
    Комментировать
  • Почему выдаёт ошибку "Ошибочная минута"?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Ну я бы тоже удивился если бы меня попросили что-то сделать в 6:320. Каким стандартом этот формат времени описывается?
    Ответ написан
    1 комментарий
  • Для чего используют функции serialize/unserialize?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    если открыть файл сессии текстовым редактором

    То вы как раз и найдёте serialize/unserialize, которые механизм сессий и использует для чтения/записи данных в файле. (разумеется, если не говорить о кастомных sessionhandler - там может быть что угодно)

    кусок кода корзины товаров (добавляет товар в корзину):

    Здесь serialize/unserialize не нужны и никакого смысла либо пользы не несут.

    serialize выполняет представление переменной PHP в некий бинарный вид (и это важно! результат serialize не текст, а именно бинарный блоб, в том числе может штатно использоваться NUL-байт). unserialize это представление восстанавливает обратно. Обратите внимание на большой варнинг в документации и не используйте unserialize на данных которые вы не контролируете полностью.

    А если я попробую просто записать в ячейку не сериализованный массив?

    Получите слово Array вместо данных и предупреждение от языка за некорректное использование массива.
    Ответ написан
    Комментировать
  • Есть ли разница между выражением и транзакцией?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Можем ли мы быть уверены, что в следующей конструкции обновление обязательно произойдет (считаем что SELECT вернул какие-то данные)?

    Нет, не можем.
    Два конкурентных запроса могут увидеть одни и те же версии строк в cte (не пересекутся на читающих блокировках даже с конкурентными писателями т.к. mvcc) и затем пойдут обновлять одни и те же строки. На блокировках обновления строк их транзакции и сериализуются. Кстати, можно и deadlock словить если строк к обновлению будет несколько и они вернутся из запроса в разном порядке.

    приостановить запрос и посмотреть что будет, если произойдет X?

    gdb может приостановить всё что угодно. Правда далее уже интересный момент что надо найти куда именно break point ставить.
    Ответ написан
    Комментировать