Задать вопрос
  • Есть ли в природе материнские платы с двумя сокетами LGA 1155?

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

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

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

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

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

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

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

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

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

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

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

    Melkij
    @Melkij
    DBA Team для вашего 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 Team для вашего PostgreSQL?
    Оператор сравнения в plpgsql такой же как в SQL. is null для проверки является ли значение null и = для равенства.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Посмотрите в vgdisplay есть ли Free PE. Если 0 - расширять просто нечем.

    Если free есть - то lvresize или lvextend. Затем расширить файловую систему (resize2fs для ext2/3/4 который у вас вероятно и есть)
    Если free нет - то необходимо добавлять новый диск или уменьшать другие разделы. Например, /home . Впрочем, судя по его размеру и 45мб занятых - вы разрезали диск неверно для своей задачи (а зачем вообще резали отдельно /var и /home ?). Может лучше будет вовсе перемонтировать раздел с /home куда-нибудь, скопировать в корневой /home данные и удалить этот том полностью.
    Если /home вам нужен отдельный - то опять же resize2fs или какая у вас там файловая система стоит. Сжимаете до какого-то размера (если возможно), проверяете что сжалась, затем уменьшаете логический том (lvresize). Имеет смысл запросить resize2fs меньше размера на который хотите уменьшить раздел. затем после lvresize ещё раз вызвать resize2fs и расширить раздел обратно - чтобы случайно не ошибиться на пару мегабайт и не повредить этим файловую систему.
    Ответ написан
    5 комментариев
  • Столбец удален, но не удален, как удалить столбец?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Мой хрустальный шар совершенно верно показал.
    Когда вы делаете add column columnname text - вы получаете NULL во всей этой колонке. Разумеется сразу после этого вы поставить NOT NULL не можете никак. Любая строка нарушает это ограничение и база отказывается ставить NOT NULL.
    Когда вы делаете add column columnname text NOT NULL - чтож, это может сработать в одном случае - у вас пустая таблица. Тогда ни одна строка не нарушает NOT NULL ограничение, у вас просто 0 строк. Если хоть одна строка есть - это невозможно. Вы просите default NULL и одновременно NOT NULL - так не бывает. В сообщении об ошибке говорится именно о добавляемой в этот момент колонке, не о какой-то другой существовавшей ранее.

    Вы должны указать какой-то не NULL default если хотите поставить NOT NULL на создаваемое поле. Либо очистить таблицу.
    Либо создать без NOT NULL, заполнить поле, потом уже делать NOT NULL.

    В postgresql действительно колонка не удаляется никогда. Но это деталь реализации и к сути вашего вопроса отношения не имеет.
    Ответ написан
    2 комментария