Size: a a a

pgsql – PostgreSQL

2020 May 27

ДЛ

Дмитрий Лукьянов... in pgsql – PostgreSQL
Victor Yegorov
вот тот, который залип — он уже есть в архиве. в логах есть записи об успешной архивации?
может быть так, что в одно место летят WAL-ы от нескольких кластеров?
вот тот, который залип — он уже есть в архиве. в логах есть записи об успешной архивации?


Говорю, он есть в архиве, но он какой-то битый, отличается по размеру.
источник

ДЛ

Дмитрий Лукьянов... in pgsql – PostgreSQL
У меня есть подозрение, что в этом виноват Commvault, который бэкапит и удаляет wal-архивы. Но нужна фактура. Пока это лишь подозрения.
источник

AM

Alexey Markovski in pgsql – PostgreSQL
Помогите пожалуйста:
DECLARE did integer;
BEGIN
INSERT INTO "Deals" (status) VALUES ('inprocess') RETURNING id as did;
INSERT INTO "Requests" VALUES (did, customer_id, service_id, NOW());
END

Выдает ошибку:
ERROR:  query has no destination for result data
CONTEXT:  PL/pgSQL function newrequest(integer,integer) line 3 at SQL statement
SQL state: 42601

На стаке только по функциям. Да и черт знает, что тут возвращать
источник

2_

2flower _ in pgsql – PostgreSQL
есть 3 варианта, если обязательно цену со скидкой надо хранить, то триггер,
либо проще сделать view где будет join этих 2 таблиц и поле, где будет на лету вычисляться скидка.
3-й вариант материализованная view,но это экзотика.
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Alexey Markovski
Помогите пожалуйста:
DECLARE did integer;
BEGIN
INSERT INTO "Deals" (status) VALUES ('inprocess') RETURNING id as did;
INSERT INTO "Requests" VALUES (did, customer_id, service_id, NOW());
END

Выдает ошибку:
ERROR:  query has no destination for result data
CONTEXT:  PL/pgSQL function newrequest(integer,integer) line 3 at SQL statement
SQL state: 42601

На стаке только по функциям. Да и черт знает, что тут возвращать
первый INSERT возвращает данные, но они никуда не направляются/присваиваются
источник

AM

Alexey Markovski in pgsql – PostgreSQL
Victor Yegorov
первый INSERT возвращает данные, но они никуда не направляются/присваиваются
Не понимаю, как это поправить?
источник

AM

Alexey Markovski in pgsql – PostgreSQL
Victor Yegorov
первый INSERT возвращает данные, но они никуда не направляются/присваиваются
Или надо присвоить без возврата?
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Дмитрий Лукьянов
вот тот, который залип — он уже есть в архиве. в логах есть записи об успешной архивации?


Говорю, он есть в архиве, но он какой-то битый, отличается по размеру.
я бы либо воспользовался готовой утилитой: pgbackrest, wal-g, barman
либо дописал бы скрипт так, чтобы он успешные попытки архивации также бы логгировал
источник

П

Павел П. in pgsql – PostgreSQL
Alexey Markovski
Или надо присвоить без возврата?
With (insert returning) as foo insert into... Select foo.did, ...
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Alexey Markovski
Не понимаю, как это поправить?
источник

П

Павел П. in pgsql – PostgreSQL
^ там даже лучше описано)
источник

ДЛ

Дмитрий Лукьянов... in pgsql – PostgreSQL
Victor Yegorov
я бы либо воспользовался готовой утилитой: pgbackrest, wal-g, barman
либо дописал бы скрипт так, чтобы он успешные попытки архивации также бы логгировал
Ну, СРК у нас продиктовано сверху. Используем его. И в целом оно нас устраивает, если бы не эти мелкие косяки.
Так что, хотелось бы разобраться с проблемой.

Я вот думаю на тему, чтобы скрипт видоизменить так, чтобы он сперва в промежуточное место копировал лог, а потом мувал в папку с архивами. Тогда мы убираем момент, когда лог находится в полузаписанном состоянии в папке с архивами.
источник

SG

Sergey Gr in pgsql – PostgreSQL
Дмитрий Лукьянов
Ну, СРК у нас продиктовано сверху. Используем его. И в целом оно нас устраивает, если бы не эти мелкие косяки.
Так что, хотелось бы разобраться с проблемой.

Я вот думаю на тему, чтобы скрипт видоизменить так, чтобы он сперва в промежуточное место копировал лог, а потом мувал в папку с архивами. Тогда мы убираем момент, когда лог находится в полузаписанном состоянии в папке с архивами.
А cp между разными файловыми системами?
источник

ДЛ

Дмитрий Лукьянов... in pgsql – PostgreSQL
Sergey Gr
А cp между разными файловыми системами?
Ну, я про соседнюю папку на одной ФС
источник

SG

Sergey Gr in pgsql – PostgreSQL
Да, пожалуй вариант с
mv
первое что стоит попробовать, даже не углубляясь
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Chern Oleksander
Мимо, на action_date есть индекс, а вот на action_tdate нет, есть смысл создавать отдельно?
action_tdate - timestampt
action_date - date
Если это нужно делать многократно (и хочется сильно ускорить) — можно переписать запрос с использованием loose indexscan.  Но для этого, на первый взгляд, понадобится как минимум индекс по (devtodev_id, action_date).
См. http://wiki.postgresql.org/wiki/Loose_indexscan
источник

CO

Chern Oleksander in pgsql – PostgreSQL
Yaroslav Schekin
Если это нужно делать многократно (и хочется сильно ускорить) — можно переписать запрос с использованием loose indexscan.  Но для этого, на первый взгляд, понадобится как минимум индекс по (devtodev_id, action_date).
См. http://wiki.postgresql.org/wiki/Loose_indexscan
Спасибо, сейчас почитаю
источник

CO

Chern Oleksander in pgsql – PostgreSQL
Yaroslav Schekin
Если это нужно делать многократно (и хочется сильно ускорить) — можно переписать запрос с использованием loose indexscan.  Но для этого, на первый взгляд, понадобится как минимум индекс по (devtodev_id, action_date).
См. http://wiki.postgresql.org/wiki/Loose_indexscan
а вот на action_date или на action_tdate?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Chern Oleksander
а вот на action_date или на action_tdate?
На action_date — у Вас же именно он используется в запросе:
SELECT mx.devtodev_id, MAX(mx.action_tdate) AS last_action_tdate
 FROM core_data.level_start_tbl AS mx
WHERE mx.action_date BETWEEN '2020-05-01' AND '2020-05-27'
GROUP BY mx.devtodev_id
источник

CO

Chern Oleksander in pgsql – PostgreSQL
Yaroslav Schekin
На action_date — у Вас же именно он используется в запросе:
SELECT mx.devtodev_id, MAX(mx.action_tdate) AS last_action_tdate
 FROM core_data.level_start_tbl AS mx
WHERE mx.action_date BETWEEN '2020-05-01' AND '2020-05-27'
GROUP BY mx.devtodev_id
а кините ссылкой, я вот не могу понять, когда происходит агрегация как в данном запросе
лучший индекс это получается на devtodev_id и action_date.
А что происходит в этот момент для MAX(mx.action_tdate).

Я к тому имеет и разница что находится внутри агрегатной функции?
если б было

SELECT mx.devtodev_id, MAX(
1
) AS last_action_tdate
 FROM core_data.level_start_tbl AS mx
WHERE mx.action_date BETWEEN '2020-05-01' AND '2020-05-27'
GROUP BY mx.devtodev_id
Это что-то изменило б?

Спасибо
источник