【问题标题】:Serial column of datatype text in psqlpsql中数据类型文本的序列列
【发布时间】:2021-01-02 02:49:40
【问题描述】:

我有一个两列表格试验(id 序列,值文本)。

然后我使用ALTER TABLEid的数据类型更改为text,仍然如果我插入如下记录:

insert into trial(value) values('name');

然后,每次我向其中添加行时,serial 仍然会增加。如果我插入一行像

insert into trial values(111111111111....a very large number, 'name');

它仍然有效,它仍然增加串行计数器。

我的问题是: 为什么它不溢出?虽然列的数据类型是文本,但序列值仍会在内部存储为整数,对吧?保存表的序列值的变量的数据类型是什么(在 psql 的实现中),以便我可以确定它永远不会溢出?

【问题讨论】:

  • CREATE TABLE 声明是什么?
  • 创建表试用(id序列,值文本);
  • 那么你不能将ids 存储在2147483647之上。
  • 但明确提供大 ID 有效
  • 我不相信,如果你真的用过serial

标签: postgresql


【解决方案1】:

如果您将显式值插入到带有DEFAULT 的列中,则不使用默认值。您输入的值不是有效的 integer 并不重要 - 它是有效的 text,这才是最重要的。

如果您没有为id 输入值,PostgreSQL 将使用该序列并将结果转换为text

【讨论】:

  • 2147483647会是序列的最大值吗?
  • 取决于它的定义方式 (\ds+ triall_id_seq)。
  • 好的,先生,非常感谢您将这么多宝贵的时间投入到我的问题中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2018-08-01
  • 2017-05-07
  • 2023-01-20
  • 2014-02-27
  • 1970-01-01
相关资源
最近更新 更多