标签列表
在Postgres中,一个事务是否可以有多个连接?Golang的使用
postgresql
go
transactions
3
3
我需要使用多个连接在单个事务的范围内同时填充Postgres表,这是否可行?
我没有看到避免此瓶颈的方法。
谢谢。
-
MasterJ
3
我认为不可能通过不同的连接共享事务。请更好地解释您想要做什么,最好添加一个示例以便于理解。
- Mario Santini
我有一个 Golang 命令,它解析一组 CSV 文件并将其填充到适当的数据库表中。这些文件非常大。解析器逐行读取文件并将其放入通道中。四个 goroutine 从通道中获取这些结果并执行 Exec()。如果我使用 db.Exec() 整个过程需要 25 分钟,而使用 tx.Exec() 则需要超过 4 小时。
- MasterJ
此外,我无法在不同的事务中处理不同的文件,因为当前文件的处理必须查看先前文件所做的更改。(Postgres不支持READ UNCOMMITED)因此,对于整个过程,我只能使用一个连接。
- MasterJ
1
个回答
1
1
我相信这个事务是不必要的。但如果非要这么做,你可以创建一个临时表,在其中填充一些例程,然后通过使用“插入选择”来批量传输数据。
-
Андрей Николаев
3
谢谢。我也考虑过这个问题。但是你为什么认为这个事务不需要呢? 根据要求,如果某个点的处理失败,我们应该将数据库恢复到之前的状态。
- MasterJ
我假设您在下载数据时会在业务逻辑层或阶段表中执行必要的检查,然后在事务之外加载它们。无论如何,长时间运行的事务涉及大量数据将导致DBMS性能下降。
- Андрей Николаев
您可以尝试调整隔离级别。选择所需的连接数(线程数),将它们设置为“读未提交”隔离级别[链接](https://www.postgresql.org/docs/9.6/static/transaction-iso.html),以查看在其他线程中所做的更改。
在每个线程中启动一个事务。
当线程完成数据加载时,必须等待其他线程并且不提交事务。
当所有线程都完成后,在所有线程上执行提交。
如果其中一个线程出现SQL错误,则回滚所有线程的更改。
- Андрей Николаев
回答链接
网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接
相关问题
4
如果在查询中使用多个连接,MySQL事务是否有效?
41
在Golang中连接多个切片
3
每个连接的Postgres并发事务数
3
一个事务可以有多个线程吗?
3
Postgres是否可以自动重试事务?
7
在领域驱动设计中,一个事务是否可以修改多个聚合?
8
在Postgres中是否有一个“AS”命令?
11
在一个JDBC连接中是否可以同时进行两个并发事务?
29
在一个Hibernate会话中,您可以有多个事务吗?
3
使用SSL证书连接Postgres的Golang