postgresql - Postgres : Whether to use oid or byte array

标签 postgresql

我正在从事一个项目,其中 postgres 数据库中有多个模式。有时我必须将一些模式从一个数据库移动到另一个数据库。在我的数据结构中,我使用了很多 oid 列,这些列在移动过程中导致问题,因为 oid 与模式移动到的新数据库中的现有 oid 发生冲突。

我正在使用以下命令进行备份和恢复架构

pg_dump -f <file> -F t -o --blobs -n <schema> <database>

pg_restore -d <database> -F t -v <file>

我所有的文件都小于 100MB,其中大部分文件的大小只有几 KB,所以我正在考虑使用 bytea 数据类型而不是 oid

这是好事还是坏事?

根据文档,如果文件非常大,那么建议使用 oid,但在我的情况下,文件会很小。

如果我使用 bytea 而不是像索引/搜索那样的 oid 是否会对性能产生影响?

最佳答案

在这种情况下不使用 oid(或 serial)的原因是它们是连续递增的,所以出现冲突也就不足为奇了。

我不是 100% 确定,但阅读文档,看起来 bytea 在存储空间、索引大小、搜索速度方面类似于 varchar和存储要求将是相似的。也就是说,它会比使用整数或长值占用更多空间并且速度更慢。但是,我不确定要慢多少,这对您的用例是否重要。

为什么不尝试整数(或长整数),而是先使用随机值而不是顺序值?如果这不起作用,我建议使用内置的 uuid 类型,而不是尝试用您自己生成的数据填充字节数组。

关于postgresql - Postgres : Whether to use oid or byte array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7200263/

相关文章:

postgresql - 在 postgres/COALESCE 中正确使用 COALESCE 无法正常工作

PostgreSQL 更改字段顺序

PostgreSQL 9.3 : Function is not unique error

postgresql - 如何使用 id 来显示它的名称? ( Phoenix 框架)

Django、Ajax 长轮询、Postgresql : idle transaction

sql - 按状态的 PostgreSQL 记录数

hibernate - 在 hibernate/jpa 环境中实际删除实体?

PostgreSQL 驱动程序崩溃在 SQLColAttribute 崩溃

sql - 在 postgres 中嵌套加入聚合

sql - 转换日期 postgreSQL 时出错