gpt4 book ai didi

python - 实时获取 SQL Server 更新的好方法是什么?

转载 作者:行者123 更新时间:2023-11-29 14:14:13 27 4
gpt4 key购买 nike

每次对表执行插入或更新时,我都在尝试找到一种方法将数据从 SQL Server 2014 和 2017 中复制出来。我正在尝试实时将这些值插入到 PostgreSQL 中的另一个表中。我探索过的少数选项是使用以下工具进行批处理:

  • Talend ETL 工具

  • PostgreSQL 中使用 cron 作业触发的外部数据包装器每小时对 PostgreSQL 表进行插入和更新的过程使用 SQL Server 表中的数据。

我不确定如何从 SQL Server 实时获取事件,我可以链接到 Kafka 或什至 Python 微服务之类的东西,或者是否有更好的方法。

最佳答案

使用触发器

Create SQL Server & Postgresql tables:

-- 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"
)

Create a linked server in SQL Server to your Postgresql server.

Then create triggers on your SQL Server table:

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

Test:

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

此示例中的触发器处理批量插入和更新。这是触发器唯一真正的陷阱 - 假设“插入”表中只有一条记录。批量插入或更新后,插入的表将填充所有新的/修改的记录。

关于python - 实时获取 SQL Server 更新的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55320827/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com