如何为" int"设置大小限制? PostgreSQL 9.5中的数据类型

时间:2016-01-19 17:30:06

标签: sql postgresql database-design sqldatatypes

我正在尝试使用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"字段

2 个答案:

答案 0 :(得分:8)

  

我明确要设置一个限制,可插入“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)
);

答案 1 :(得分:2)

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

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

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)
);

Here是一个SQL小提琴。

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