我在某个嗅觉公司的面试中遇到了这个问题。现在我明白了这本身就是个错误的问题。
我的建议是,PostgreSQL复制行,然后删除前一行,即使用事务,然后根据系统隐藏索引对行进行排序。
他们说这不是一个正确的答案,但他们并没有说出正确的答案,因为面试就像在一个方向上高速的乒乓球。
我问过核心团队的人谁在IRC做PostgreSQL。他们说结果顺序可能是不可预测的,并且给了我C中非常低级别的PostgreSQL文档,所以我什么都不懂。
现在我找到了这样一条声明:https://www.postgresql.org/docs/current/sql-select.html:
如果指定order子句,则返回的行按指定顺序排序。如果未给出ORDER,则按系统最快生成的顺序返回行。(见以下条文所订的命令)
好的,但是如果我们使用非常简单的表,而方案中没有任何关系,比如USER (id,name)。有什么意义?为什么更新后的行会出现在最后一个位置?面试时我应该回答什么?
发布于 2020-10-05 15:33:03
首先,不仅PostgreSQL,而且所有其他数据库,元组的顺序不能保证。当您进行插入时,每个元组都会被写入PostgreSQL中的页面。然后,将页面写入磁盘并遵循相应的文件系统机制。新更新的行不一定是最后一个位置,除非指定了ORDER。新更新的行出现在最后一个位置的原因可能是LRU替换策略是在该文件系统中采用的。
https://stackoverflow.com/questions/64211427
复制相似问题