powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Синхронизация содержимого двух таблиц в одной БД
4 сообщений из 4, страница 1 из 1
Синхронизация содержимого двух таблиц в одной БД
    #40133128
Oda412
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Помогите, пожалуйста, написать функцию, которая добавляет или удаляет строки в таблице t2 после сравнения с таблицей t1.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE TABLE t1(
	f1 TEXT PRIMARY KEY,
	f2 INTEGER);

CREATE TABLE t2(
	f1 TEXT PRIMARY KEY,
	f2 INTEGER,
	f3 TEXT);

INSERT INTO t1(f1,f2) VALUES ('a',0);
INSERT INTO t1(f1,f2) VALUES ('b',1);
INSERT INTO t1(f1,f2) VALUES ('c',0);
INSERT INTO t1(f1,f2) VALUES ('d',0);
INSERT INTO t1(f1,f2) VALUES ('e',5);

INSERT INTO t2(f1,f2,f3) VALUES ('a',0,'aaa');
INSERT INTO t2(f1,f2,f3) VALUES ('b',0,'bbb');
INSERT INTO t2(f1,f2,f3) VALUES ('c',0,'ccc');
INSERT INTO t2(f1,f2,f3) VALUES ('d',0,'ddd');



После применения функции синхронизации t2 должна будет выглядеть так:
Код: plaintext
1.
2.
3.
4.
5.
6.
 f1 | f2 | f3
----+----+-----
 a  |  0 | aaa
 b  |  0 | bbb
 c  |  0 | ccc
 d  |  0 | ddd
 e  |  5 |

Пробовала следующие варианты:
1. Тема с использованием триггерной функции https://www.sql.ru/forum/1096084/sinhronizaciya-tablic-iz-raznyh-bd не пойдет, так как таблица t1 всегда будет обновляться целиком: старое содержимое t1 будет стираться, а новые данные будут копироваться заново целиком.
2. Пробовала сделать по этой теме
https://www.sql.ru/forum/1323681/replikaciya-v-tablicu-s-dannymi?hl=%f1%e8%ed%f5%f0%ee%ed%e8%e7%e0%f6%e8%ff%20%f2%e0%e1%eb%e8%f6
но нет возможности поменять wal_level на Logical - не могу перегружать сервер.

Может быть, есть способ все сделать обычной функцией?
...
Рейтинг: 0 / 0
Синхронизация содержимого двух таблиц в одной БД
    #40133155
Misha111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oda412,

delete from t2 where f1 not in (select f1 from t1);

insert into t2 ...
(select .. from t1
minus
select .. from t2)
on conflict ... do update ...
тут вариантов исполнения много, на любой вкус...
...
Рейтинг: 0 / 0
Синхронизация содержимого двух таблиц в одной БД
    #40133185
Oda412
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Misha111, Спасибо огромное, Вы мне очень помогли!
На всякий случай, если кому пригодится: в PostgreSQL вместо MINUS работает EXCEPT
...
Рейтинг: 0 / 0
Синхронизация содержимого двух таблиц в одной БД
    #40133192
Misha111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oda412,

с минусом ошибся, сорян. мышечная память)))
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Синхронизация содержимого двух таблиц в одной БД
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]