Size: a a a

pgsql – PostgreSQL

2020 June 24

V

Valery in pgsql – PostgreSQL
Тогда да, достаточно простой вставки
источник

VA

Vladimir Avramov in pgsql – PostgreSQL
У справочников строений, квартир и адресных обьектов
источник

VA

Vladimir Avramov in pgsql – PostgreSQL
Т.е. у всех
источник

u

undefined in pgsql – PostgreSQL
Привет.
Не поможете примером триггера, который передает аргумент в вызываемую им процедуру. Причем аргумент, который мог быть вызван при UPDATE, DELETE, INSERT отслеживаемой таблицы?
Условно есть 2 таблицы
categories
+----+--------+----------+
| id | name   | quantity |
+----+--------+----------+
| 1  | овощи  | 0        |
| 2  | фрукты | 0        |
+----+--------+----------+
products
+----+---------+------------+
| id | name    | categoryId |
+----+---------+------------+
| 1  | яблоко  | 2          |
| 2  | банан   | 2          |
| 3  | помидор | 1          |
+----+---------+------------+
Я хочу при изменении таблицы products обновлять данные в categories. А именно менять quantity.

Для этого я завожу триггер
CREATE TRIGGER products_trigger
AFTER event INSERT OR
           UPDATE OF categoryId OR
           DELETE
ON products
FOR EACH ROW
EXECUTE PROCEDURE update_categories()

И Функцию
CREATE FUNCTION update_categories(categoryId)
 LANGUAGE sql
 AS 'UPDATE categories SET quantity = (SELECT quantity FROM categories WHERE id = categoryId)'

И вот я хочу в функцию передать id категории из таблицы, за который следит триггер. Как я могу это сделать?
источник

D

Dmitry in pgsql – PostgreSQL
undefined
Привет.
Не поможете примером триггера, который передает аргумент в вызываемую им процедуру. Причем аргумент, который мог быть вызван при UPDATE, DELETE, INSERT отслеживаемой таблицы?
Условно есть 2 таблицы
categories
+----+--------+----------+
| id | name   | quantity |
+----+--------+----------+
| 1  | овощи  | 0        |
| 2  | фрукты | 0        |
+----+--------+----------+
products
+----+---------+------------+
| id | name    | categoryId |
+----+---------+------------+
| 1  | яблоко  | 2          |
| 2  | банан   | 2          |
| 3  | помидор | 1          |
+----+---------+------------+
Я хочу при изменении таблицы products обновлять данные в categories. А именно менять quantity.

Для этого я завожу триггер
CREATE TRIGGER products_trigger
AFTER event INSERT OR
           UPDATE OF categoryId OR
           DELETE
ON products
FOR EACH ROW
EXECUTE PROCEDURE update_categories()

И Функцию
CREATE FUNCTION update_categories(categoryId)
 LANGUAGE sql
 AS 'UPDATE categories SET quantity = (SELECT quantity FROM categories WHERE id = categoryId)'

И вот я хочу в функцию передать id категории из таблицы, за который следит триггер. Как я могу это сделать?
update_categories(NEW.category_id), емнип

https://www.postgresql.org/docs/12/plpgsql-trigger.html
источник

D

Dmitry in pgsql – PostgreSQL
только надо DELETE отдельно обработать
источник

u

undefined in pgsql – PostgreSQL
Dmitry
update_categories(NEW.category_id), емнип

https://www.postgresql.org/docs/12/plpgsql-trigger.html
аа, то есть из триггера оставляю пустой аргумент, а внутри функции он все равно будет?
источник

u

undefined in pgsql – PostgreSQL
undefined
аа, то есть из триггера оставляю пустой аргумент, а внутри функции он все равно будет?
Фигню сморозил. Я понял) Если аргумент пустой, то все аргументы будут переданы. В моем случае надо только categoryId, то я могу передать только нужное из самого тригера. Так?
источник

D

Dmitry in pgsql – PostgreSQL
undefined
аа, то есть из триггера оставляю пустой аргумент, а внутри функции он все равно будет?
мм, внутри функции вряд ли, скорее всего вам надо триггер посложнее сделать, с логикой

сейчас будет дикий псевдокод

CREATE OR REPLACE FUNCTION update_categories() RETURNS trigger
LANGUAGE plpgsql
AS $$

DECLARE
   update_stmt text := format('UPDATE categories SET quantity = (SELECT quantity FROM categories WHERE id = $1)'::text);

BEGIN

   IF TG_OP = 'DELETE' THEN
       EXECUTE update_stmt USING OLD.category_id;
   ELSE -- не уверен в синтаксисе
       EXECUTE update_stmt USING NEW.category_id;
   END IF;

   RETURN NULL; -- на самом деле надо изучить, как return value триггера на каждое событие влияет на дальнейшую судьбу этого события

END;
$$;


идея такая :) если вам нужно - я могу посмотреть у себя примеры, как реально выглядит plpgsql такая :) если вам нужно - я могу посмотреть у себя примеры, как реально выглядит plpgsql
источник

u

undefined in pgsql – PostgreSQL
Dmitry
мм, внутри функции вряд ли, скорее всего вам надо триггер посложнее сделать, с логикой

сейчас будет дикий псевдокод

CREATE OR REPLACE FUNCTION update_categories() RETURNS trigger
LANGUAGE plpgsql
AS $$

DECLARE
   update_stmt text := format('UPDATE categories SET quantity = (SELECT quantity FROM categories WHERE id = $1)'::text);

BEGIN

   IF TG_OP = 'DELETE' THEN
       EXECUTE update_stmt USING OLD.category_id;
   ELSE -- не уверен в синтаксисе
       EXECUTE update_stmt USING NEW.category_id;
   END IF;

   RETURN NULL; -- на самом деле надо изучить, как return value триггера на каждое событие влияет на дальнейшую судьбу этого события

END;
$$;


идея такая :) если вам нужно - я могу посмотреть у себя примеры, как реально выглядит plpgsql такая :) если вам нужно - я могу посмотреть у себя примеры, как реально выглядит plpgsql
примеры были бы здоровы. Хотя бы по синтаксису посмотреть, что где используется. А то скудненько в доках как-то
источник

D

Dmitry in pgsql – PostgreSQL
undefined
примеры были бы здоровы. Хотя бы по синтаксису посмотреть, что где используется. А то скудненько в доках как-то
я там отредактировал сообщение, должно быть сейчас близко к правде. дальше сами :)

CREATE TRIGGER остаётся таким же, как был у вас
источник

N

Natalie Strauch in pgsql – PostgreSQL
/help@JohnRoebot
источник

u

undefined in pgsql – PostgreSQL
Dmitry
я там отредактировал сообщение, должно быть сейчас близко к правде. дальше сами :)

CREATE TRIGGER остаётся таким же, как был у вас
круто, спасибо)
источник
2020 June 25

a

ani in pgsql – PostgreSQL
#ani
наткнулся случайно на .. дочерние таблицы, наcледование таблиц, вот что это ?  пример из доки
CREATE TABLE capitals (
   state           char(2)
) INHERITS (cities);
если потом удалю cities, останется ли все что было создано в capitals вместе с cities
да
и ваще что это, можно пример в практике для чего может понадобиться. ага.."Родительскую таблицу нельзя удалить", пока существуют унаследованные от неё.
а для чего это все, может мне надо а ?
я редко сюда захожу можно  с хештегом #ani #ani ответить.
почему наткнулся - при замене Default для столбца меня попроcили указать ONLY.. и вот тут меня задело.
источник

RD

Reddeppa D in pgsql – PostgreSQL
Hi  guy's
источник

RD

Reddeppa D in pgsql – PostgreSQL
Any difference in Oracle collection and postgre collection
источник

Д

Данияр in pgsql – PostgreSQL
Привет всем! как можно ускорить нечеткий поиск? у меня примерно 1,5 млн
источник

m

maxp.dev in pgsql – PostgreSQL
Уважаемые, подскажите, как правильно индексы описать для такой таблички
create table t( id int, arr int[])
при условии что хочется уникальности пар (id,arr), и быстрый поиск по (id, any element of arr)
?
источник

РА

Романов Александр... in pgsql – PostgreSQL
maxp.dev
Уважаемые, подскажите, как правильно индексы описать для такой таблички
create table t( id int, arr int[])
при условии что хочется уникальности пар (id,arr), и быстрый поиск по (id, any element of arr)
?
вероятно тебе нужен Gin Index
источник

Д

Данияр in pgsql – PostgreSQL
Романов Александр
вероятно тебе нужен Gin Index
я его поставил, но все равно 2 минуты отрабатывает
источник