Задать вопрос
  • Как задать дефолтные права на все таблицы в схеме в postgres?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Необходим свой комплект ALTER DEFAULT PRIVILEGES для каждого пользователя, который будет создавать объекты в базе.
    Это раз.

    Два - идея вообще стабильно работать будет только для CRUD. Всякие alter table требуют быть владельцем таблицы либо быть в группе владельца (не в общей с владельцем группе, а именно чтобы владелец таблицы был в группе пользователя).

    Подумайте над организацией процессов. Наименее проблемно будет, если у вас будет только один пользователь, который создаёт или меняет схему данных, а ro (select только) и rw (select/insert/update/delete) пользователей может быть много. Всё остальное к приключениям.
    Ответ написан
    Комментировать
  • Как транспонировать строки в столбцы?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    проще на клиенте форматировать. Но поскольку число столбов в этой задаче можно считать константой, то можно и захардкодить
    select EXTRACT(YEAR FROM time) AS year,
    sum(cost) filter(where EXTRACT('month' FROM time) = 1) as jan,
    sum(cost) filter(where EXTRACT('month' FROM time) = 2) as feb,
    ...
    sum(cost) filter(where EXTRACT('month' FROM time) = 12) as dec
    from tablename
    where ...
    group by 1
    order by 1
    Ответ написан
    Комментировать
  • Оптимизируется ли UPDATE, если значения полей на самом деле не меняются?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    В postgresql создаётся физически новая версия строки при update (с обновлением всех индексов либо hot update если применимо) даже если ни одно поле не меняет своё действительное значение. Есть встроенный триггер suppress_redundant_updates_trigger, который можно повесить на таблицу, тогда ничего действительно не меняющий в данных update будет пропускаться.

    Если меняется хотя бы одно значение - оптимизации не подлежит, должна быть записана новая версия строки в таблицу (чтобы MVCC обеспечить). Если возможно, оптимизация HOT update исключит сопутствующее обновление индексов.
    Ответ написан
    9 комментариев
  • Каким образом определяют наиболее старую версию python для работоспособности кода?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    - у тебя какой версии X?
    - Y
    - ага, а у меня Z. Значит напишем "не тестировалось с X версии ниже Y"


    Спустя время
    - давай поднимем минимальную версию до Z, смотря какая там фича полезная нам была бы
    - хм, вышел он N времени назад, проблемой оказаться не должно, не возражаю, добавь только в доку "требуется X версии минимум Z"


    Так оно и происходит обычно.
    Ответ написан
    Комментировать
  • PL/pgSQL. Не дает вернуть из функции значение типа setof record. Причина?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Вариант записи допустимый, а вот вызываете неверно:
    melkij=> create or replace function myfunc()
    returns setof record
    as $$
    declare
    res record;
    begin
    execute 'select 1' into res;
    return next res;
    execute 'select 2' into res;
    return next res;
    return;
    end;
    $$
    language plpgsql;
    CREATE FUNCTION
    melkij=> select * from myfunc() as s(i int);
     i 
    ---
     1
     2
    (2 строки)
    
    melkij=> select myfunc();
    ERROR:  materialize mode required, but it is not allowed in this context
    КОНТЕКСТ:  PL/pgSQL function myfunc() line 6 at RETURN NEXT


    PS: прямой return query (или return query execute если это реально необходимо) будет проще и нагляднее перекладывания return next через лишнюю переменную.
    Ответ написан
  • Можно ли восстановить дамп кластера postgresql-12 ( oc Ubuntu ) на postgresql 14 ( ос Alpine )?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Да
    Ответ написан
    Комментировать
  • Удаление базы данных postgresql без запущенного демона?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Без запущенного экземпляра postgresql не предусматривается никакого эквивалента drop database.

    Можно удалить весь PGDATA и восстановить из бекапа весь кластер (если бекапы бинарные aka pitr) либо инициализировать заново через initdb, запустить и импортировать дамп (если бекап представляет собой дампы).
    Ответ написан
    Комментировать
  • Какой размер кэш процессора на одно ядро?

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

    Например, Intel 13 generation (Raptor Lake):
    64e36131e373d800849356.png
    L1 для данных (DFU) и L1 для инструкций (IFU) у каждого ядра свои собственные.
    L2 у каждого P-ядра свой собственный, но для E-ядер - используется общий.
    L3 общий
    Ответ написан
    3 комментария
  • Какой уровень блокировки строк по умолчанию в запросе SELECT?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Ни один из перечисленных.
    Для простого SELECT нужны AccessShareLock на таблицу/индексы/etc. row-level блокировки не применяются за ненадобностью.
    Ответ написан
    Комментировать
  • Как сделать определение конфигурации поиска в другом столбце таблицы?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    melkij=> \df to_tsvector
                                      Список функций
       Схема    |     Имя     | Тип данных результата | Типы данных аргументов |  Тип  
    ------------+-------------+-----------------------+------------------------+-------
     pg_catalog | to_tsvector | tsvector              | json                   | функ.
     pg_catalog | to_tsvector | tsvector              | jsonb                  | функ.
     pg_catalog | to_tsvector | tsvector              | regconfig, json        | функ.
     pg_catalog | to_tsvector | tsvector              | regconfig, jsonb       | функ.
     pg_catalog | to_tsvector | tsvector              | regconfig, text        | функ.
     pg_catalog | to_tsvector | tsvector              | text                   | функ.
    (6 строк)

    действительно не существует такой функции.

    Поправьте тип данных поля config на ожидаемый regconfig.
    Ответ написан
    Комментировать
  • Как узнать с какого IP-адреса оставляют заявки пользователи с формы на сайте?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    $_SERVER['REMOTE_ADDR']

    Возможны варианты конфигурации, при которых адрес клиента необходимо получить каким-то другим способом, а не из REMOTE_ADDR, в этих случаях следуйте инструкции хостера или вашей группы эксплуатации.
    Ответ написан
    Комментировать
  • Почему тип столбца xml не проверяет входное значение?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    melkij=> select 'hello'::xml;
      xml  
    -------
     hello
    (1 строка)
    
    melkij=> select '<foo>hello'::xml;
    ERROR:  invalid XML content
    СТРОКА 1: select '<foo>hello'::xml;
                     ^
    ПОДРОБНОСТИ:  line 1: Premature end of data in tag foo line 1
    <foo>hello
              ^
    line 1: chunk is not well balanced
    <foo>hello

    есть проверка.

    Если вам нужно проверить, что это не просто валидный xml, но целый документ - добавьте check constraint с проверкой на columnname is document
    Ответ написан
    2 комментария
  • Секционирование таблицы по хэшу. В чем принцип?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Как-как. Вызывается некоторая хэш-функция для значений ключа партицирования, её результат делится нацело на modulus, строка попадёт в ту партицию, для которой совпадает remainder.

    create table part (i int) partition by hash (i);
    create table part_0 partition of part FOR VALUES WITH (MODULUS 2, REMAINDER 0);
    create table part_1 partition of part FOR VALUES WITH (MODULUS 2, REMAINDER 1);
    insert into part select generate_series(1,10);
    select * from only part_0;
    select * from only part_1;


    на слишком малых выборках хэш ожидаемо может быть не столь равномерно распределён.
    Ответ написан
    Комментировать
  • Как правильно очищать archived WAL логи PostgreSQL?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Берёте pgbackrest.
    Ну или walg или barman какие.

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

    архивные логи ДО-момента backup'а уже не нужны

    до позиции LSN на момент запуска basebackup, самого старого из тех, который по вашей политике резервного копирования нужно хранить.
    Ответ написан
    2 комментария
  • Как линии pcie делятся между устройствами?

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

    Видяха единственная станет работать по 8 линиям? Или если во втором слоте не видеокарта, то и линии не будут делиться?

    Каждая линия PCI-E - шина типа точка-точка, на одной шине не может быть нескольких устройств. Поэтому установка любого устройства (даже x1) в слот PCIE_4 переведёт слот PCIE_1 в режим x8.

    Использование PCIe 2.0 x16 не возможно, так как согласно спецификации материнки в случаи установки ssd в m2_2 (а он там установлен) этот слот не работает.

    Верно.

    Итого, при установленной видеокарте, ryzen 2700 и pci-e nvme SSD в слоте M2_2 вы не можете использовать остальные слоты PCI-E x16. Третий nvme тут ставить только или в ущерб устройства в первом PCI-E x16 или в x1 в ущерб полосе (но не латентности) самого nvme. Ну или в USB 3.2 адаптером.
    Ответ написан
    Комментировать
  • Почему пропускается отчистка?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    skipping vacuum of \"%s\" --- lock not available - это не интересно, это штатное поведение. Причина именно та которая написана. Автовакуум тут хочет поработать, но какая-то другая запущенная транзакция держит конфликтующий лок на таблицу. Автовакуум не ждёт этот лок, а просто отменяется и попробует прийти попозже.

    А вот Segmentation fault - ну, это Segmentation fault, также известный как сегфолт. Ставите все доступные минорные обновления какие есть, если после этого по прежнему сегфолтится - то зовёте кого-то кто понимает в gdb или разбираетесь сами. Имея результаты изысканий, по возможности (но крайне рекомендуется) с обрезанным до воспроизводимого примера дампом, идёте к разработчику базы. Обратите внимание, поскольку вы говорите про 1с - то это точно НЕ postgresql global developing group, а какой-то местный форк. Потому что 1с не осилили работать с postgresql.
    Ответ написан
  • Как скопировать данный из RAID 1 диска?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    raid1 - это решение поддержания high availability на случай физического отказа накопителя. Ну эти, старые добрые HDD, помирающие в случайный момент времени и спокойно заменяемые в hot swap корзине на аналогичный из коробки с запасными частями, без прерывания работы сервера и сервисов.

    Всё.

    Если вы почему-то решили, что raid1 должен как-то заменять бекапы и страховать ошибки оператора - подумайте ещё раз.
    Ответ написан
  • Как сделать выбрку по массиву JSON в Postgresql 9.6?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    select (select j->>'name' from jsonb_array_elements(jsonb_field) as j where j->>'custom_twine' = 'custom_38') from tablename
    Ответ написан
    1 комментарий
  • Как хранятся имена сущностей в PSQL?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Все unquoted identifiers принудительно приводятся парсером в нижний регистр.
    quoted identifiers - используются как есть.
    https://www.postgresql.org/docs/current/sql-syntax...
    Ответ написан
    Комментировать
  • Выбор между оперативной памятью. Двухканал или низкие тайминги?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Смотрим.

    DDR4-2400 даёт 19200мб/с, при CL17 имеет латентность 14.16 ns
    DDR4-3200 даёт 25600мб/с, при CL20 имеет латентность 12.5 ns

    Выше пропускная способность - лучше
    Ниже латентность - лучше

    Это даже не касаясь вопроса второго канала памяти, в теории дающего удвоение пропускной способности при той же латентности.

    CL имеет смысл сравнивать на одной частоте, а на разной частоте тайминги могут означать не то чем кажутся.
    Ответ написан
    Комментировать