Size: a a a

pgsql – PostgreSQL

2021 January 08

VY

Victor Yegorov in pgsql – PostgreSQL
David Shiko
Спасибо. А если настроить связь 1 к 1, это поможет?
нет. можно  CASCADE-ом снести всех потомков при удалении родителя. в обратном направлении средствами DDL не сделать. можно триггер повесть.

однако встаёт вопрос — а не стоит ли просто поменять местами родителя и потомка?..
источник

Ss

Stts stss in pgsql – PostgreSQL
Павел П.
Написать не триггерную, а просто функцию и запускать еë cron' ом или pg_cron' ом
но тогда задание не засчитают
источник

П

Павел П. in pgsql – PostgreSQL
Stts stss
но тогда задание не засчитают
Может это нулевой пункт задания: проверить будут ли люди уточнять этот момент, понимая что написано что-то не то? :)
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Stts stss
но тогда задание не засчитают
триггера в базе срабатывают на DML-ы (или DDL-ы), т.е. вам в любом случае нужен клиент в каком-то виде.

а задание для Postgres-а? может там MSSQL какой-нить?
источник

VP

Vyn Da Polozh in pgsql – PostgreSQL
Парни, привет, подскажите,
Как вставить функцию в шаблонизированную строку запроса?
Поле created имеет тип timezone. Хочу привести исходные данные к этому типу с помощью postgre'вской функции TO_TIMESTAMP().
Как это сделать?
INSERT INTO data.source(created, created_utc) VALUES($1, $2)

Если вставляю функцию непосредственно в значения, то такая ошибка:
error: invalid input syntax for type timestamp with time zone: "TO_TIMESTAMP('1581569438')"

Если делаю так:
INSERT INTO data.source(created, created_utc) VALUES(TO_TIMESTAMP('$1'), TO_TIMESTAMP('$2'))
То ошибка следующая:
duplicate key value violates unique constraint "source_pkey"
источник

DS

David Shiko in pgsql – PostgreSQL
Victor Yegorov
нет. можно  CASCADE-ом снести всех потомков при удалении родителя. в обратном направлении средствами DDL не сделать. можно триггер повесть.

однако встаёт вопрос — а не стоит ли просто поменять местами родителя и потомка?..
Спасибо большое за помощь, сэкономили пару часов гуглинга!
А как тогда поступить если очень много полей выходит (>20) ?
Логически это 1 таблица, но с большой вероянтностью данные будут извлекккаться только из первых 10 колонок или из вторых 10 колонок и редко будут нужны  разом
источник

Ss

Stts stss in pgsql – PostgreSQL
Victor Yegorov
триггера в базе срабатывают на DML-ы (или DDL-ы), т.е. вам в любом случае нужен клиент в каком-то виде.

а задание для Postgres-а? может там MSSQL какой-нить?
постгреса
источник

AL

Alexey Lesovsky in pgsql – PostgreSQL
Let Eat Bee
Я правильно понимаю, что если latency диска 1ms и постегрес бекенду хочется загрузить 200 страниц, то в общем случае на это уйдет 200ms? т.е. он не сможет параллельно запросить все страиницы разом и будет тягать их по одной?
нет, не совсем так, постгрес не работает с диском напрямую, чтение/запись идет через VFS ядра - пг запрашивает блоки и дальше уже зависит от того как планировщик упорядочит IO запросы и сам драйвер устройства вернет блоки. Кроме того, постгерс поддерживает параллельные запросы, что тоже вносит свои коррективы.
источник

DS

David Shiko in pgsql – PostgreSQL
Victor Yegorov
нет. можно  CASCADE-ом снести всех потомков при удалении родителя. в обратном направлении средствами DDL не сделать. можно триггер повесть.

однако встаёт вопрос — а не стоит ли просто поменять местами родителя и потомка?..
в первых 10 колонках мета информация (когда создано, когда обновлено, кто создал, кто обновил и т.п.), а во вторых 10 колонках реальная информация про объект (рост, вес, возраст и т.п.)
источник

LB

Let Eat Bee in pgsql – PostgreSQL
Alexey Lesovsky
нет, не совсем так, постгрес не работает с диском напрямую, чтение/запись идет через VFS ядра - пг запрашивает блоки и дальше уже зависит от того как планировщик упорядочит IO запросы и сам драйвер устройства вернет блоки. Кроме того, постгерс поддерживает параллельные запросы, что тоже вносит свои коррективы.
ну вот если бекенд один. ему надо 200 блоков, он дёргает read(2) 200 раз так? IO планировщик видит первый блок и ему неизвестно о будущих 199
источник

AB

Andrey Borodin in pgsql – PostgreSQL
надо 200 блоков - в разных ситуациях значит разное
источник

AB

Andrey Borodin in pgsql – PostgreSQL
в секскане - будет fadvise
источник

LB

Let Eat Bee in pgsql – PostgreSQL
Andrey Borodin
надо 200 блоков - в разных ситуациях значит разное
Buffers: shared read=200 внутри index scan
источник

AB

Andrey Borodin in pgsql – PostgreSQL
большинство будет считано из page cache
источник

AB

Andrey Borodin in pgsql – PostgreSQL
но это 200 обращений к ФС
источник

LB

Let Eat Bee in pgsql – PostgreSQL
Andrey Borodin
большинство будет считано из page cache
это как повезёт. с точки зрения постгреса он 200 блоков последовательно запрашиваети  в общем случае диск будут дёргать с queue depth=1 получается, верно?
источник

AB

Andrey Borodin in pgsql – PostgreSQL
да
источник

VY

Victor Yegorov in pgsql – PostgreSQL
в любой непонятной ситуации считайте что это random read
источник

LB

Let Eat Bee in pgsql – PostgreSQL
вот жеж. в дисках queue depth до 32-64 вроде как почти бесплатны по latency , можно было б всё разом "заказать"
источник

AB

Andrey Borodin in pgsql – PostgreSQL
64 бекенда закажут
источник