Использовать триггеры
Создать SQL Server & amp; Таблицы Postgresql:
blockquote>-- SQL Server create table test (id int identity(1,1) not null primary key, name varchar(25), description varchar(1000)) go -- Postgresql: CREATE TABLE public.test ( id integer, name character varying(25) COLLATE pg_catalog."default", description character varying(1000) COLLATE pg_catalog."default" )
Создайте связанный сервер в SQL Server с вашим сервером Postgresql.
Затем создайте триггеры в своей таблице SQL Server:
blockquote>create trigger iu_trigger_name on test after insert, update as begin UPDATE [SQLAuth_PG].[DefaultDB].[public].[test] SET name = t.name, description = t.description FROM [SQLAuth_PG].[DefaultDB].[public].[test] p INNER JOIN inserted t ON p.id = t.id INSERT INTO [SQLAuth_PG].[DefaultDB].[public].[test] ([id] ,[name] ,[description]) SELECT t.id, t.name, t.description FROM inserted t WHERE NOT EXISTS ( SELECT * FROM [SQLAuth_PG].[DefaultDB].[public].[test] WHERE id = t.id ) end go create trigger d_trigger_name on test after delete as begin delete p FROM [SQLAuth_PG].[DefaultDB].[public].[test] p inner join deleted d on p.id = d.id end go
Тест:
blockquote>insert into test (name, description) select 'Name1', 'Name 1 description' go select * from [SQLAuth_PG].[DefaultDB].[public].[test] --output --id name description --1 Name1 Name 1 description update test set description = 'Updated description!' where name = 'Name1' go select * from [SQLAuth_PG].[DefaultDB].[public].[test] -- output --id name description --1 Name1 Updated description! delete from test go select * from [SQLAuth_PG].[DefaultDB].[public].[test] go -- postgresql table is empty
Триггер в этом примере обрабатывает пакет вставки и обновления. Это единственная настоящая ошибка с триггерами - при условии, что в «вставленной» таблице есть только одна запись. После массовой вставки или обновления вставленная таблица заполняется всеми новыми / измененными записями.
Вы указали бы базу данных при помощи синтаксиса databasename.tablename
Пример:
SELECT
mydatabase1.tblUsers.UserID,
mydatabse2.tblUsers.UserID
FROM
mydatabase1.tblUsers
INNER JOIN mydatabase2.tblUsers
ON mydatabase1.tblUsers.UserID = mydatabase2.tblUsers.UserID
Можно выбрать из любой другой таблицы с оператором JOIN и использующий этот тип синтаксиса.
SELECT A.*, B.* FROM db1.table1 A LEFT JOIN db2.table1 B ON A.id = B.id