繁体   English   中英

如何在 PostgreSQL 9.5 中为“int”数据类型设置大小限制

[英]How can I set a size limit for an "int" datatype in PostgreSQL 9.5

我正在试验来自使用 MySQL 的 SQL 的 PostgreSQL,我只想用这段代码创建一个表,这是有效的 SQL:

CREATE TABLE flat_10
(
  pk_flat_id INT(30) DEFAULT 1,
  rooms      INT(10) UNSIGNED NOT NULL,
  room_label CHAR(1) NOT NULL,

  PRIMARY KEY (flat_id)
);

我收到错误

ERROR:    syntax error at or near "("
LINE 3:   pk_flat_id integer(30) DEFAULT 1,

我在网上进行了搜索,但没有找到答案,而且我似乎无法在 PostgreSQL 手册中找到答案。 我究竟做错了什么?

我明确想对可以插入“pk_flat_id”字段的位数设置限制

我明确想对可以插入“pk_flat_id”字段的位数设置限制

您当前的表定义以任何方式征收“大小限”。 在MySQL的参数int数据类型仅用于上显示时,它的列的显示宽度的应用程序的提示

您可以将值 2147483647 存储在int(1)而不会出现任何问题。

如果要限制要存储在整数列中的值,可以使用检查约束:

CREATE TABLE flat_10
(
  pk_flat_id bigint DEFAULT 1,
  rooms      integer NOT NULL,
  room_label CHAR(1) NOT NULL,

  PRIMARY KEY (flat_id), 
  constraint valid_number 
      check (pk_flat_id <= 999999999)
);

答案是您使用numericdecimal类型。 这些记录在此处

请注意,这些类型可以采用可选的精度参数,但您不希望这样。 所以:

CREATE TABLE flat_10
(
  pk_flat_id DECIMAL(30) DEFAULT 1,
  rooms      DECIMAL(10) NOT NULL,
  room_label CHAR(1) NOT NULL,

  PRIMARY KEY (pk_flat_id)
);

是一个 SQL 小提琴。

我认为 Postgres 不支持无符号小数。 而且,您似乎真的想要密钥的序列类型,而长位数是多余的。

将整数更改为数字完全有效! CREATE TABLE flat_10 ( pk_flat_id bigint DEFAULT 1, 房间数字非空, 房间标签 CHAR(1) 非空, );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM