Задать вопрос
  • Как влияет полное шифрование диска на срок его службы?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Для полноты картины добавлю: по соображениям криптостойкости шифрование диска наверняка отключит использование TRIM (см. конкретную реализацию шифрования). Что при шифровании всей доступной ёмкости диска существенно ухудшит производительность I/O на дешёвых SSD - они не смогут использовать неиспользуемое пространство flash для ускорения записи (так называемый SLC кеш) потому что будут думать, что вся ёмкость занята полезными данными, а избыточной подменной ёмкости flash ради удешевления там конечно практически нет.
    Скорей всего SMR HDD тоже рады не будут (да они вообще ничему не рады).

    И не забудьте заранее позаботиться о бекапах.
    Ответ написан
    Комментировать
  • Почему nextcloud не может писать в папке home?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    У www-data нет x прав на директорию /home/username/
    Ответ написан
    Комментировать
  • Показывать IP клиента NASу за NAT в Mikrotik, возможно?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Но по таким правилам все клиенты попадают в NAS от IP роутера (то есть типа изнутри).

    Так а зачем вы делаете маскарад на входящий трафик?
    https://help.mikrotik.com/docs/display/ROS/NAT
    Ответ написан
    Комментировать
  • Как правильно составить запрос INSERT в postgresql?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    ... DO UPDATE SET payment_date = info.payment_date + interval '23 hours';

    Данные конфликтующей строки доступны
    The SET and WHERE clauses in ON CONFLICT DO UPDATE have access to the existing row using the table's name (or an alias), and to rows proposed for insertion using the special excluded table.

    имени таблицы (или алиаса указанного в запросе) - та версия строки что есть
    псевдоним excluded - те значения что этот insert предполагал записать
    Ответ написан
    2 комментария
  • Правильно ли организовано логирование?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Документация отвечает однозначно
    Current date and time (start of current transaction);

    current_timestamp - это всегда время начала транзакции. Сколько бы транзакция ни заняла времени, до её окончания current_timestamp будет возвращать одно и то же значение.
    А правильно это для вашей задачи или нужно использовать другую из функций датывремени - это только к вам вопрос.
    Ответ написан
    1 комментарий
  • Как ускорить работу слота репликации на PostgreSQL?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Скорей всего упираетесь в производительность IO на временных файлах, увеличение logical_decoding_work_mem с этим должно помочь.
    Затем посмотрите, не упираетесь ли в 100% cpu на этом процессе. logical decoding однопоточный, ему важна производительность в один поток. Тут ничего не поможет. Прочитать, понять и переупорядочить данные среди гигабайтов wal'ов всё равно придётся.
    Ответ написан
    Комментировать
  • С чего начинать тестирование двухюнитовых серверов с 16 планками U-DIMM и 24 хардами в Linux?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    CPU(s):                          256
    On-line CPU(s) list:             0-255
    Thread(s) per core:              2
    Core(s) per socket:              64
    Socket(s):                       2

    Я не понял проблематику ситуации. 40 ядер, несколько сотен гигов RAM да пара десятков дисков - средняя железка, какие там у вас специфические проблемы такие? 40 ядер нынче не проблема даже одним сокетом получить.

    Что касается памяти тут отдельная история, поступила жалоба, что U-DIMMы работают только при полной сборке (все 16), либо подключенные последовательно (с1 по 4 место например), но подключая в 1,3,7,12(например) места некоторые планки не определяются, либо сервер работает не корректно (не запускается, не стартует).

    См. документацию к материнке. Там будет описано, в каком порядке необходимо заполнять слоты. Да, это стандартное требование JEDEC для DIMM'ов, что серверных, что десктопных. Технически связано с терминаторами. Затем, после требований стандарта, идёт логика как не повесить всю имеющуюся память на один и тот же канал памяти одного и того же CPU. NUMA всё-таки.
    Вы правда занимаетесь серверами?
    Ответ написан
  • Почему я могу установить NULL в колонку mark, если у меня есть CHECK(mark in (1,2,3))?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Нет, не должен. Значение NULL не противоречит такому check constraint. На самом деле даже в исходниках самого postgresql есть замечания, что такое поведение несколько неожиданно, но таков стандарт SQL.
    Ответ написан
    Комментировать
  • Что лучше, 2 ядра 4 Гц или 8 ядер 1.6 Гц (цифры рандом)?

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

    Когда-то давно, когда в десктопах были преимущество одноядерные CPU, маркетинг любил называть частоты. Потом полюбил козырять числом ядер. Потом ещё чем-нибудь. Одна характеристика чтобы доказать собственное превосходство над конкурентом (и что не менее важно - над предыдущим поколением собственной же продукции) - это же так здорово! Только нихрена это так просто не работает.

    Вот уже которое десятилетие единственный корректный ответ в выборе CPU - сравнить в конкретных условиях. Задача со звёздочкой: сравнить корректно.

    В частности, вы не указали, одной ли микроархитектуры два сравниваемых CPU. А этот маленький нюанс моментально лишает всякого смысла декларируемую частоту работы. Двухкратная разница производительности на одной частоте? Почему нет, история знает такие примеры. Потом кэши, организация памяти, а из недавнего - состояние защит от атак на спекулятивное выполнение. Ежели всё это идентично и из различий только число ядер и частота - то опять же упрёмся в необходимые задачи. Однопоточному приложению будет безразлично, есть ли ещё 7 ядер или только второе.
    Ответ написан
    Комментировать
  • Как удалить null из выборки?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    array_agg(attr.name) filter(where ...)
    Ответ написан
    2 комментария
  • Как поменять значение max_stack_depth в postgres?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Сначала внимательно посмотрите на свой триггер, не пускаете ли вы его в бесконечную рекурсию. Нет, postgresql не будет вам мешать делать бесконечно-рекурсивный триггер и никак не будет препятствовать его выполнению до тех пор пока это будет возможно физически. И вот тут stack depth limit обычно и заканчивается первым.
    Ответ написан
    3 комментария
  • Как вставить аргумент функции между $$ $$ строкой в PostgreSQL?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Напрямую запросом, без лишнего execute
    CREATE OR REPLACE FUNCTION example(arg int)
    RETURNS int4
    LANGUAGE plpgsql
    AS $$
    declare
       out int;
       BEGIN
       --function body
       SELECT field * arg into out FROM randomtable;
       return out;
       END
       $$;
    select example(1);


    Или, если действительно нужно генерировать динамический SQL, то передать параметром в using:
    CREATE OR REPLACE FUNCTION example(arg int)
    RETURNS int4
    LANGUAGE plpgsql
    AS $$
    declare
       out int;
       somequery text;
       BEGIN
       --function body
       somequery := $q1$ SELECT field * $1 FROM randomtable $q1$;
       EXECUTE somequery into out using arg;
       return out;
       END
       $$;
    Ответ написан
    Комментировать
  • Как надёжен RAID на простой, не серверной, плате?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Это так называемый fake raid. Удивительная поделка, объединяющая недостатки одновременно аппаратного и программного рейда, но не обладающая никакими из их достоинств.
    Использовать можно только если скучно и хочется приключений.

    Не забудьте настроить бекапы. Рейды с избыточностью данных это про снижение простоя, а не замена бекапам.
    Ответ написан
    Комментировать
  • Увеличение LVM раздела на внешней хранилки?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    pvresize. Затем lvresize с resize2fs или lvcreate дальнейшие или ещё чего, смотря зачем увеличивали.
    Ответ написан
    Комментировать
  • Как подключать питание процессора 8+8pin на LGA1700?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Единственный смысл добавления всё новых проводов от блока питания к материнской плате помимо 20-контактного коннектора ATX из 1995 года - уменьшение силы тока, протекающего по наиболее загруженным проводам и контактам разъёмов.

    Как простое следствие этого - нет никакого физического смысла в использовании разветвителя. Это никак не уменьшит силу тока, протекающего по кабелю от блока питания. Позволит обмануть плату, если она требует чтобы оба коннектора были подключены, но это именно обман, а должны быть раздельные комплекты проводов от блока питания.
    Ответ написан
    Комментировать
  • Соблюдается ли очередь данных при нескольких bulk-insert операциях?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Могут ли их primary key id смешиватЬся?
    То есть, если запросить дату с ORDER BY id, и получить

    Да.

    За генерацию значений отвечают sequence (неважно каким именно способом объявлена таблица - default nextval явно созданного сиквенса, serial или generated identity - это всё будет сиквенс).
    Сиквенс гарантирует только уникальность своих значений. Никаких гарантий порядка записи в таблицу он не даёт.

    Два параллельных insert в postgresql так же друг друга никак не блокируют и исполняются конкурентно. Кто и в каком порядке надёргал nextval сиквенса потребное для своих данных количество раз - такие значения они и запишут.
    Ответ написан
    Комментировать
  • Какой разрядности счётчики транзакций в PostgreSQL 14 версии?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    internals 64 битные
    heap 32 битные

    Если вы хотите чтобы ни один крупный проект не стал обновляться на такую новую версию - без проблем, поменять формат страницы heap не так уж сложно. Почему после принятия такого патча никто не станет обновляться? Потому что вместе со сменой формата страницы вы напрочь сломаете in-place pg_upgrade и вынудите обновляться только через dump+restore. Удачи это сделать на 10тб базе за обычные для pg_upgrade 5-10 минут даунтайма. А если у вас крошечная база которую можно за 10 минут обновить дампом - то вам и 64-битные xid банально не нужны и не важны.
    Если интересно поподробнее, подождите запись вот этого свежего доклада
    Ответ написан
    Комментировать
  • Есть ли разница в БД Postgres: хранить string(255) или string?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Для начала, в postgresql нет типа данных string. (а если это самодельный тип, что postgresql сделать тоже позволяет, то смотреть надо как он реализован у вас)

    Для текстовых данных в postgresql есть:
    - text. Просто text, без специфических ограничений на содержимое
    - varchar - это всё тот же самый text. К varchar можно добавить указание ограничения максимальной длины хранимого текста в символах. Почему это отдельный тип данных? Потому что такого требование стандарта SQL
    - char - фиксированный длины (в символах! в байтах они всё равно динамической длины получатся для того же utf8). Смысла его использовать в postgresql, как вы сами процитировали документацию, нет. Зачем он нужен? Потому что описан в стандарте.

    В отличии от, например, mysql, для postgresql нет ничего особого в значении 255. Если в определении таблицы видно такое ограничение на 255 символов - обычно это означает именно "никто не обдумывал цель такого ограничения для этого поля, просто какое-то число"

    Говоря о выборе между text или varchar(N) - varchar(N) с разумным для этих данных N предпочтительнее для коротких строк, потому что не даст записать 10мб туда где должно быть, например, не более 64 символов (это не совсем шутка, случай из практики). А по ошибке в месте записи дебажить логику приложения куда как проще, чем искать потом откуда такое взялось.
    Ответ написан
    2 комментария
  • Не могу импортировать базу?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Не нравитсо именно это

    Никогда не думали, что само сообщение об ошибке пишут чтобы его вообще-то прочитали?

    Invalid default value for 'post_date'

    Смотрим на определение, видим DEFAULT '0000-00-00 00:00:00'
    Ну да, всё верно, такое значение некорректно, такой даты не существует. См. deprecated NO_ZERO_DATE
    Ответ написан
    1 комментарий
  • Возможно подключить через PG Admin к удаленной БД на продакшене?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    а зачем нужен pgadmin для управления базой?

    Ну а помимо этого, pgadmin не только умеет подключаться удалённо куда ему скажут, но и самостоятельно запускать для этого ssh туннель.
    Ответ написан
    Комментировать