Size: a a a

pgsql – PostgreSQL

2021 January 12

AG

Alexander Greckov in pgsql – PostgreSQL
Sergey Bezrukov
Может вам просто нужна "общая шина" на базе какой-нибудь Apache Kafka или подобного? Синхронизация прямо на уровне БД, как вы её описываете, выглядит не особо надёжно.
Этот вариант по видимому не будет давать консистентности. Ибо клиент может быть периодически не в сети
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Alexander Greckov
Задача ещё более усложнена тем, что надо делать ещё роутинг данных (привязка к разным компьютерам на уровне записи)
И для этого есть "стандартное" решение — replication origins.
Вот описание, например, (из логической репликации PostgreSQL): https://www.postgresql.org/docs/current/replication-origins.html
источник

SB

Sergey Bezrukov in pgsql – PostgreSQL
Alexander Greckov
Этот вариант по видимому не будет давать консистентности. Ибо клиент может быть периодически не в сети
Почему? Данные из Кафки никуда не денутся, как появится - прочитает. Лишь бы у него consumer group была правильно указана (не менялась и не пересекалась с другими).  Хотя тут это оффтоп, конечно - больше для https://t.me/proKafka тема
источник

AG

Alexander Greckov in pgsql – PostgreSQL
Yaroslav Schekin
И для этого есть "стандартное" решение — replication origins.
Вот описание, например, (из логической репликации PostgreSQL): https://www.postgresql.org/docs/current/replication-origins.html
Спасибо! Тоесть эта штука уже из коробки сможет реплицировать конкретные записи на конкретные компьютеры и наоборот?
источник

AG

Alexander Greckov in pgsql – PostgreSQL
Ну конечно возникает ещё куча вопросов как версионировать схемы, чтобы репликация не накрывалась...
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Alexander Greckov
Спасибо! Тоесть эта штука уже из коробки сможет реплицировать конкретные записи на конкретные компьютеры и наоборот?
Это логическая репликация.
Она, во-первых, не совсем consistent, во-вторых, использует совсем другой принцип (разбор / передачу WAL), и, в-третьих, это только основа для построения своих решений.
источник

А

Артём Курилко... in pgsql – PostgreSQL
Всем привет, я новичок в постгресе, нужна ваша помощь в написании просто функции получения всех значений таблицы.
источник

А

Артём Курилко... in pgsql – PostgreSQL
Попытался сам сделать, но возникает ошибка
CREATE OR REPLACE FUNCTION getValues()
 RETURNS TABLE(all column) AS
$BODY$
BEGIN

   RETURN QUERY    
       SELECT  *
       FROM Person;
 END;
$BODY$
 LANGUAGE plpgsql VOLATILE
 COST 100
 ROWS 1000;
ALTER FUNCTION getValues()
 OWNER TO postgres;
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Артём Курилко
Попытался сам сделать, но возникает ошибка
CREATE OR REPLACE FUNCTION getValues()
 RETURNS TABLE(all column) AS
$BODY$
BEGIN

   RETURN QUERY    
       SELECT  *
       FROM Person;
 END;
$BODY$
 LANGUAGE plpgsql VOLATILE
 COST 100
 ROWS 1000;
ALTER FUNCTION getValues()
 OWNER TO postgres;
Которую мы должны угадать? ;)

Вместо "all column" либо перечислите все поля, либо используйте "RETURNS SETOF person".
И да, вот это всё:
  LANGUAGE plpgsql VOLATILE
 COST 100
 ROWS 1000;

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

IZ

Illia Zubovich in pgsql – PostgreSQL
Всем привет.
источник

Ss

Stts stss in pgsql – PostgreSQL
CREATE OR REPLACE FUNCTION count_actives() RETURNS TRIGGER
AS $$
DECLARE
row RECORD;
BEGIN
FOR row IN (SELECT * FROM active)
LOOP
IF (SELECT count(*) FROM status WHERE user_name = row.user_name) = 0 THEN
execute 'insert into status(user_name, day_count, night_count) values($1,0,0)' using row.user_name;
END IF;
IF (EXTRACT(HOUR FROM now())<18) THEN
UPDATE status SET day_count = day_count + 1 WHERE user_name = row.user_name;
DELETE FROM active WHERE id_active = row.id_active;
ELSE
UPDATE status SET night_count = night_count + 1 WHERE user_name = row.user_name;
DELETE FROM active WHERE id_active = row.id_active;
END IF;
RETURN NEW;
END LOOP;
END;
$$ LANGUAGE plpgsql;

Кто знает как в этом запросе сделать так чтобы обрабатывались все записи таблицы active, на данный момент обрабатывается только одна запись и функция триггерная завершается
источник

IZ

Illia Zubovich in pgsql – PostgreSQL
Может кто то знаком с foreign tables и pg_dump, подскажите. Можно ли сделать exclude foreign data wrappers?
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Stts stss
CREATE OR REPLACE FUNCTION count_actives() RETURNS TRIGGER
AS $$
DECLARE
row RECORD;
BEGIN
FOR row IN (SELECT * FROM active)
LOOP
IF (SELECT count(*) FROM status WHERE user_name = row.user_name) = 0 THEN
execute 'insert into status(user_name, day_count, night_count) values($1,0,0)' using row.user_name;
END IF;
IF (EXTRACT(HOUR FROM now())<18) THEN
UPDATE status SET day_count = day_count + 1 WHERE user_name = row.user_name;
DELETE FROM active WHERE id_active = row.id_active;
ELSE
UPDATE status SET night_count = night_count + 1 WHERE user_name = row.user_name;
DELETE FROM active WHERE id_active = row.id_active;
END IF;
RETURN NEW;
END LOOP;
END;
$$ LANGUAGE plpgsql;

Кто знает как в этом запросе сделать так чтобы обрабатывались все записи таблицы active, на данный момент обрабатывается только одна запись и функция триггерная завершается
не делать RETURN NEW; в цикле?
источник

Ss

Stts stss in pgsql – PostgreSQL
И все?
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Stts stss
И все?
я не телепат, я не могу этот код проверить. может и ещё что-то: может в таблице только одна запись?.. может вы делаете что-то некорректно?..
для триггерной ф-ции тут слишком много лишних движений, долго работать будет
источник

N

Nikolay in pgsql – PostgreSQL
Nikolay
Сегодня в 19:30 мск Постгрес-вторник. Гость — Пётр Зайцев, Percona. Будем говорить в том числе о:
- новом модуле pg_stat_monitoring, pMM, мониторинге Постгреса и открытых СУБД вообще
- как Percona расширила экспертизу MySQL на в том числе Постгрес и как стать экспертом в обеих областях
- сертификация по Постгресу от Percona
- сильные и слабые стороны Постгреса
Подключайтесь к стриму, задавайте любые вопросы

Вся инфа (в том числе зум-ссылка) -- как обычно в доке http://bit.ly/RuPostgresTuesday

YouTube: https://YouTube.com/RuPostgres
Обязательно поговорим про mysql vs postgres -- технологии, коммьюнити и тд.

Стрим уже вот-вот, подключайтесь!

https://www.youtube.com/watch?v=vOBQeOCx13g&feature=youtu.be

https://us02web.zoom.us/j/84731385509?pwd=SXo3OVFGZGFwY2l2YVFTNW1mQ3Jvdz09
источник

Ss

Stts stss in pgsql – PostgreSQL
Victor Yegorov
не делать RETURN NEW; в цикле?
спасибо!!!
источник

VG

Viktor Grigorev in pgsql – PostgreSQL
Подскажите пожалуйста, как можно дебажить такую проблему - в pg_stat_activity появляется update без returning в состоянии wait client read, потом наступает statement timeout, проходит ещё час +/-, клиент понимает, что соедините с базой пропало. При этом параллельно через другой коннект запросы нормально идут. Как-то проблема связана с посредниками - pgbouncer, haproxy, через которые запросы идут. Сталкивался ли кто с подобным?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Viktor Grigorev
Подскажите пожалуйста, как можно дебажить такую проблему - в pg_stat_activity появляется update без returning в состоянии wait client read, потом наступает statement timeout, проходит ещё час +/-, клиент понимает, что соедините с базой пропало. При этом параллельно через другой коннект запросы нормально идут. Как-то проблема связана с посредниками - pgbouncer, haproxy, через которые запросы идут. Сталкивался ли кто с подобным?
А если из psql сделать тот же UPDATE, что будет (на подобные запросы тоже есть ответ в протоколе — то, за счёт чего получается "UPDATE 10" в psql / клиентах)?
А вообще, как-то "трассировать" PostgreSQL и посредников пробовали?
источник

VG

Viktor Grigorev in pgsql – PostgreSQL
Воспроизвести руками пока не получалось, единственная зацепка - если клиент напрямую в базу ходит без посредников, то проблемы нет. Трассировать - что имеется ввиду?
источник