Задать вопрос
  • Почему не работают снепшоты в postgresql?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    But note that any database changes made by any one of these transactions remain invisible to the other transactions, as is usual for changes made by uncommitted transactions.

    https://www.postgresql.org/docs/current/functions-...
    поведение полностью соответствует задокументированному.
    Ответ написан
    Комментировать
  • Почему предлагает форматировать swap раздел?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=...

    это пожалуй основная причина и есть. Если вы уведёте систему в сон (hibernate), а затем загрузитесь в другой linux использующий тот же самый swap - вы наверняка потеряете состояние и данные из hibernate режима.
    Если вы знаете как с этим жить - сможете сделать общий swap на обе системы самостоятельно.
    Ответ написан
  • Жёсткий диск на 3тб, не удалось создать раздел, почему?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Древняя MBR таблица разметки диска упирается в 2,2ТБ (ровно 2 TiB если точнее). Вам нужно сделать таблицу разделов GPT.

    Но с поддержкой технологий у майкрософт, как обычно, всё плохо и присутствуют удивительные ограничения. Начните отсюда: https://learn.microsoft.com/ru-RU/troubleshoot/win...

    Кстати, это известное ограничение упомянуто на самом диске под словом important.
    Ответ написан
  • Как по вашему мнению рациональнее собрать дисковую систему на сервере?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    raid10 на 6 дисков, конечно, если место не поджимает. Быстро, удобно, нет извращений "ой, системный диск пустой и вообще по нулям i/o, вебовый забит под завязку, а диски под базой загружены в потолок".
    raid5 под базой зрелище зело печальное в работе.
    Ответ написан
  • Понимание PCI-ex линий?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Открываете мануал к материнке и внимательно ищете сведения о том, что куда подведено электрически, в каком количестве. Если в мануале не описано - то продолжаете упорно искать в интернетах, что куда подведено. Начните с блок-схемы чипсета.

    В частности, самый верхний M.2 вам недоступен вовсе. Потому что i7 10700k - это 10 поколение, мануал однозначно упоминает что верхний M.2 работает только при установке CPU 11 поколения (потому что слот подведён на линии PCI-E самого CPU)
    Средний M.2 отключит один из разъёмов SATA в случае использования SATA M.2. Для NVME диска нет примечаний, до 4 линий от чипсета.
    Нижний M.2 отключит два разъёма SATA при установке любого SSD в этот слот. Останутся ли у него 4 линии для PCI-E - не упомянуто, но скорей всего да.

    У чипсета линий PCI-E более чем достаточно, аж 24 штуки. К чипсету подключены два M.2, один слот PCI-E x4, один слот x1, итого на всякую прочую мелочёвку остаётся ещё 11 линий.

    учитывая количество линий на чипсете, я могу установить 1 видеокарту в режиме x16

    Верхний PCI-E подключен к CPU, а не к чипсету.
    Ответ написан
    1 комментарий
  • Что происходит в момент добавления нового столбца в БД?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    https://ru.stackoverflow.com/q/721985/203622

    Вот есть таблица с 1000 записей. В ней 9 колонок. На 3 из них есть индексы.

    На такой мелочи без разницы. Перезапись такой крохи штука быстрая.

    1. Возможно ли дозапись новой колонки в существующую структуру? Или под капотом происходит полное копирование всех данных в новую таблицу (табличное пространство?)

    В зависимости от конкретного alter table add column.
    Если вы добавляете add column score float default random() - то будем переписывать всю таблицу и перестраивать все существующие индексы.
    Если default с константой и у вас pg11 или новее - то обновим в системном каталоге описание таблицы, а саму таблицу трогать не будем.
    Если нет default (т.е. null) - то без оглядки на версию базы просто обновим описание таблицы и сами файлы таблицы трогать не будем.

    2. Происходит ли пересоздание индексов?

    да, если выполняется table rewrite

    3. Происходят ли какие-то еще важные для понимания сути работы в БД процессы?

    классическая история частых даунтаймов, что для операции нужна эксклюзивная блокировка. То есть для взятие блокировки не должно быть совсем никого, кто эту таблицу трогал в транзакции, начавшейся до alter table. Если у вас в это время работает какая-то аналитика на 10 минут или pg_dump - будут приключения, нужен statement_timeout
    Ответ написан
    2 комментария
  • Postgresql ltree: как получить вершины (все записи без родителей)?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Обратите внимание, "получить записи яляющиеся вершинами" и "все записи без родителей" - это разные задачи.

    where nlevel(ltree) = 1 -- все записи состоящие из одного уровня.


    Записи без родителей - это когда у вас есть ltree "Top.Science.Space.Astronomy", но нет записи "Top.Science.Space"
    Ответ написан
    1 комментарий
  • Можно ли восстановить дамп кластера postgresql-12 на версии postgresql-10?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Да, в рамках возможного. Какой-нибудь create procedure ничего кроме ошибки не даст, не было такого синтаксиса в pg10. Набор простых табличек - да хоть в postgresql 8.0
    Ответ написан
    Комментировать
  • Что за магия с PostgreSQL?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    приведение массива record к массиву композитного типа позиционное, а не символьное. Поменяйте в
    SELECT DISTINCT ON (asin) asin, price, reviews, raing

    порядок полей на совпадающий с таковым в таблице.

    убрали бы лишние подзапросы, что ли.
    (SELECT array_agg(j) FROM (SELECT DISTINCT ON (j.asin) j FROM jsonb_populate_recordset(NULL::t_best_asin_ranking_2, '[{
    "asin":"B06XH9FNH1",                                                                                                  
    "price": 1.5,                                                                                                   
    "rating": 1.5,
    "reviews": 1
    }]') j ORDER BY j.asin) r);

    вот так хотя бы.
    Ответ написан
    4 комментария
  • Как работает индекс при составном UniqueConstraint?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    В настоящее время (pg15) уникальное ограничение может быть только btree индексом.
    Следовательно, общее для btree правило префиксного поиска. btree(a,b,c) может так же эффективно использоваться для поиска по префиксу - where a = ? или where a = ? and b = ? - но не может эффективно использоваться для where b = ? или where c = ?
    Ответ написан
    4 комментария
  • Комбинированный запрос в зависимости от условия?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    не надо пытаться запутывать планировщик странными условиями, у него своей работы хватает. https://use-the-index-luke.com/sql/where-clause/ob...
    Нужно условие в запросе? Добавьте это условие в текст запроса. Не нужно условие? Не добавляйте его в текст запроса.

    Уточните в документации к своей библиотеке доступа к базе, как для неё правильно передавать переменное число параметров в параметризованный запрос (prepared statement), подобно эталонному PQexecParams.
    Ответ написан
    1 комментарий
  • Как написать функцию для парсинга json на PLpgSQL?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    raise notice '%', l_json->>l_key;
    всё
    Ответ написан
  • Potsgres 13 - как реализовать систему Master-Master?

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

    Если очень хотите головной боли и новых аварий по ночам вместо того чтобы спокойно спать - возьмите какой-нибудь autofailover типа patroni и прочих.

    Критичная проблема фундаментальна - CAP теорема в целом и последствия split brain в частности.
    Ответ написан
    2 комментария
  • Используется ли пагинация в SQL запросах?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Хотите сделать пагинацию правильно - не используйте offset, а передавайте сведения сортировки последнего показанного поста.
    https://use-the-index-luke.com/sql/partial-results...
    https://use-the-index-luke.com/no-offset

    Наверняка видели, когда переходите на следующую страницу (например, лента постов отсортированная по времени публикации), вы вдруг видите те же самые записи что только что видели - просто потому что пока вы читали предыдущую страницу кто-то опубликовал новые посты и offset вас честно сдвинул.
    Ответ написан
    1 комментарий
  • Доп. вопрос к ответу - Это будет 2 RAID1 по 4 диска или 4 RAID1 по 2 диска, которые дальше объединены в RAID0?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Зависит от реализации.

    В linux raid (mdraid), например, raid10 - это особая штука. Сделать raid10 на 3 дисках? Да не вопрос, соберём и будет работать, честно гарантировать выживание массива при выпадении одного любого диска. А если хотите - можете собрать raid10 с избыточностью 3, тогда может помереть любые два диска.
    Куда какой блок при этом пишется - зависит от layout, это не просто зеркало поверх страйпа (или наоборот)

    Если говорить "по учебнику" - то для RAID10 нужно минимум 4 диска. Массив переживёт выпадение только одного любого из дисков массива. Максимальное число выпавших дисков не зависит от количества дисков в массиве. Выпадение второго диска может быть фатально. Но при большом везении RAID10 может потерять до половины дисков массива - если вы теряете только те блоки, которые массив может прочитать с другого живого диска.
    Ответ написан
    Комментировать
  • Почему процессоры без встроенной карты не быстрее процессоров со встроенной?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Потому что это одни и те же кристаллы. Зачем разрабатывать и производить много разных модификаций кристаллов, если можно взять один и тот же, включать/отключать некоторые блоки, заодно тем самым уменьшая общую отбраковку.

    Ведь память это же самое дешевое, что можно сделать на кристалле?

    Это как раз обычно самое дорогое - самый большой по площади регион. Больше площадь = меньше кристаллов с пластины. Больше площадь кристалла = выше риск получения брака у каждого из кристаллов. Меньше исправных кристаллов = выше стоимость каждого.
    Ответ написан
    Комментировать
  • PSQL отрезает концовки некоторых слов в to_tsvector, что делать?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    melkij=> SELECT * from ts_debug('russian', 'дело сделать кот наконец то');
     alias |    description    |  token  |  dictionaries  |  dictionary  | lexemes 
    -------+-------------------+---------+----------------+--------------+---------
     word  | Word, all letters | дело    | {russian_stem} | russian_stem | {дел}
     blank | Space symbols     |         | {}             |              | 
     word  | Word, all letters | сделать | {russian_stem} | russian_stem | {сдела}
     blank | Space symbols     |         | {}             |              | 
     word  | Word, all letters | кот     | {russian_stem} | russian_stem | {кот}
     blank | Space symbols     |         | {}             |              | 
     word  | Word, all letters | наконец | {russian_stem} | russian_stem | {}
     blank | Space symbols     |         | {}             |              | 
     word  | Word, all letters | то      | {russian_stem} | russian_stem | {}
    (9 строк)


    lexemes text[] — the lexeme(s) produced by the dictionary that recognized the token, or NULL if none did; an empty array ({}) means it was recognized as a stop word

    https://www.postgresql.org/docs/current/textsearch...

    Там же, далее:
    melkij=> SELECT ts_lexize('russian_stem', 'наконец');
     ts_lexize 
    -----------
     {}

    ts_lexize returns an array of lexemes if the input token is known to the dictionary, or an empty array if the token is known to the dictionary but it is a stop word, or NULL if it is an unknown word.

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

    Если вы с таким поведением не согласны, используйте другой словарь или делаете свой: https://www.postgresql.org/docs/current/textsearch...
    Ответ написан
    Комментировать
  • Почему так сделано postgresql работа с tablespace?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    2022 год блин. Ставите весь целиком PGDATA на nvme ssd.

    Почему такие default_tablespace - потому что как бы их не сделать, всё равно сыпятся вопросы (куча вопросов) "ой а почему команда Х сделала Z, ведь логично что я хотел Y"
    Ответ написан
  • Не могу выполнить запрос к БД используя PDO. В чём проблема?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Как должно быть видно по тексту ошибки, ругается не PHP, а совсем даже СУБД.

    TLDR: структура запроса (например, сортировка) через prepared statements изменяться не может. Только константы в запросе.
    Ответ написан
    Комментировать
  • Как освободить пространство с LVM?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Если есть под рукой пустой накопитель от 82гб:
    - подключить доп диск
    - pvcreate на него на всю ёмкость
    - vgextend
    - pvmove старый_диск новый_диск
    - vgreduce
    - pvremove
    - переделываете партиции на nvme как нравится
    - повторить заново с pvcreate только теперь pvmove с временного диска обратно на nvme

    Если на время перенести некуда - то pvresize + уменьшить размер раздела, потом создать новый раздел на освободившемся месте.

    PS: доктор, я в каждой команде написал pg вместо vg, это ещё лечится?
    Ответ написан
    Комментировать