小编Gil*_*ili的帖子

为什么 CTE 对丢失的更新开放?

我不明白 Craig Ringer 在评论时的意思:

如果插入事务回滚,此解决方案可能会丢失更新;没有强制执行 UPDATE 影响任何行的检查。

/sf/answers/609160401/ 上。请提供一个示例事件序列(例如,线程 1 执行 X,线程 2 执行 Y)以演示丢失更新是如何发生的。

postgresql cte concurrency upsert

11
推荐指数
1
解决办法
5124
查看次数

如何确定添加索引的成本/收益?

根据克雷格·林格的说法:

虽然在(或包括)引用端外键列上创建索引通常是个好主意,但这不是必需的。您添加的每个索引都会稍微减慢 DML 操作的速度,因此您需要为每个INSERT,UPDATE或支付性能成本DELETE。如果索引很少使用,它可能不值得拥有。

您如何确定添加索引的收益是否超过其成本?

您是否在添加索引之前/之后分析单元测试并检查整体性能提升?或者,还有更好的方法?

postgresql index optimization

11
推荐指数
1
解决办法
2853
查看次数

每个连接的临时架构?

我正在尝试将我的单元测试从 H2 迁移到 Postgresql。

目前,H2 为我提供了一个内存模式,这样每个连接都映射到一个唯一的模式、创建表、运行测试并删除模式。模式创建和销毁由 H2 自动处理。

单元测试同时运行。

在 Postgresql 中执行此操作的最佳方法是什么?具体来说,

  1. 如何获得每个连接的唯一架构?
    • 测试框架应该生成唯一的名称还是有一个内置的机制来做到这一点?
  2. 如何确保在断开连接时删除架构?
    • 当单元测试被终止时,我不想以悬空模式结束。
  3. 什么方法会产生最高的性能?
    • 我需要每秒创建/删除数十个模式。

更新:我在这里找到了一个相关的答案但它无法删除模式,以防运行单元测试的进程被杀死。

postgresql unit-test

8
推荐指数
2
解决办法
1万
查看次数

如何表示具有多个父级的有向图?

http://dirtsimple.org/2010/11/simplest-way-to-do-tree-based-queries.html提供了一种用于从闭包表中插入和删除的算法。

我想建模一个类似的数据结构,除了节点可能有多个父节点。

鉴于:

图#1

如果我们删除[B, C]我希望最终得到:

图#2

如果我们删除节点,B我希望最终得到:

图 #3

但是,如果您使用作者的算法删除链接或节点,您会注意到它标记[D, C, 1]为删除,这是不可取的。

到目前为止我尝试过的

我尝试通过添加一references列来调整原始数据结构,该列指示在两个节点之间有多少种方式可以传输。在上面的示例中,您可以从AC通过B或通过D。这个想法本来是当B被删除时,从A到的路径C被保留并且引用计数从 2 减少到 1。理论上这很好,但我不知道如何让实现工作,现在我想知道这是完全可能的(数据结构可能没有包含足够的信息来确定要删除哪些行)。

我在问什么

您将如何调整 Closure Tables 以支持多个父母?您会推荐哪些替代数据结构?/sf/ask/283370601/包含此类数据结构的详尽列表,但尚不清楚哪些支持(或最适合)多个父级。

database-design hierarchy

8
推荐指数
1
解决办法
3248
查看次数

如果客户端连接在持有锁时被终止会发生什么?

如果客户端建立事务,锁定行或表,并且客户端进程在有机会回滚或提交事务之前崩溃,会发生什么情况?SQL Server 对事务做了什么(如果有的话)?

  1. SQL Server 是否有心跳机制来检测套接字是否被杀死?
  2. 在检测到套接字被杀死时,SQL Server 会自动回滚事务吗?或者行/表锁是否持续存在(导致其他客户端死锁)?

请提供权威来源以支持您的答案。

更新:客户端进程崩溃。我不是在谈论调用KILL命令的人。

sql-server transaction

8
推荐指数
1
解决办法
5198
查看次数

如何分析 Postgresql 实例?

我的 Postgresql 服务器正在使用 100% cpu。我想弄清楚单个查询是否很慢,或者我只是开始用过多的请求来敲打服务器。

是否有某种我可以附加的分析器让我知道:

  1. 哪些查询会在多个连接中触发大部分 CPU 时间?
  2. 对于上述查询,每个查询的平均运行时间是多少?

postgresql profiler

8
推荐指数
1
解决办法
5605
查看次数

如何触发日志消息中的换行符?

日志消息是否可以跨越多行?我期待:

RAISE WARNING 'Line 1\nLine 2';

导致以下日志:

Line 1
Line 2
Run Code Online (Sandbox Code Playgroud)

但相反,我得到:

Line 1\nLine 2

有任何想法吗?

postgresql plpgsql

4
推荐指数
1
解决办法
3786
查看次数

如何在没有键限制的情况下防止重复的 VARCHAR?

我想将 URL 存储在数据库列中,并强制执行值必须唯一的约束。不幸的是,MySQL 对索引键的长度有限制,这意味着只检查 URL 的前 X 个字符的唯一性。因此,我遇到了误报,其中两个不同的 URL 触发了约束集成违规,因为前 X 个字符恰好是相同的。

有没有办法在 VARCHAR 列上强制执行唯一性而对其长度没有任何限制?

例如,是否可以在前 X 个字符上创建非唯一索引,然后在其余字符相同时触发块 INSERT?

mysql varchar unique-constraint

4
推荐指数
1
解决办法
3464
查看次数

何时从预写日志 (WAL) 中删除条目?

如果我理解正确,当用户更新数据库记录并提交事务时, commit() 调用将阻塞,直到完成以下步骤:

  • 数据库记录了预写日志 (WAL) 中的更改。
  • 数据库更新实际记录。
  • 数据库删除 WAL 条目。

我有以下关于 WAL 的问题:

  1. 数据库什么时候知道从 WAL 中删除条目是安全的?
  2. WAL 是否暗示将记录写入磁盘两次(一次在 WAL 中,一次在数据库文件中)?
  3. Postgres声称 WAL“显着减少了磁盘写入次数,因为只需要将日志文件刷新到磁盘”但是(回到问题 #1)在从数据库中删除条目之前,您不必刷新主数据库文件沃尔?

corruption

2
推荐指数
1
解决办法
996
查看次数