org.postgresql.util.PSQLException:错误:“order_id”列中的空值违反了非空约束

时间:2016-01-14 11:25:58

标签: sql postgresql stored-procedures

我在postgresql中创建了一个存储过程,如下所示:

 INSERT INTO ABC

     (order_id,order_dt, customer_id, route_id, routenum, ordertype, create_station_id, create_stationtype, create_time,create_user_id,tran_time, tran_user_id,station_id)

   values 

     (1,$1, $2, $3, $4, $5, $6, $7, LOCALTIMESTAMP, $8, 

    default, default,$9) 

   returning  order_id;

order_id类型SERIAL - > primary key

插入时出现错误如下:

PSQLException: ERROR: null value in column "order_id" violates not-null constraint Where: SQL function "insert_ABC" statement 1.

我正在使用PostgreSQL 8.2。它是在托管空间我这样做。

我知道发生错误,因为默认类型默认为null。

default类型的SERIAL相当于什么。

请指导我。

1 个答案:

答案 0 :(得分:1)

您可以跳过order_id中的INSERT INTO

CREATE TABLE ABC(order_id SERIAL PRIMARY KEY, order_dt INT -- rest of cols
                );

INSERT INTO ABC(order_dt)  -- rest of cols
VALUES (2)                 -- rest of values
RETURNING order_id;

或使用default

INSERT INTO ABC(order_id, order_dt)
VALUES (default, 2)
RETURNING order_id;

修改

你确定吗?检查演示:

CREATE TABLE ABC(order_id SERIAL, order_dt INT);

INSERT INTO ABC(order_dt)  -- rest of cols
VALUES (2) ;  

INSERT INTO ABC(order_id, order_dt)
VALUES (default, 2) ; 

SqlFiddleDemo

输出:

╔═══════════╦══════════╗
║ order_id  ║ order_dt ║
╠═══════════╬══════════╣
║        1  ║        2 ║
║        2  ║        2 ║
╚═══════════╩══════════╝

尝试使用SQLFiddle执行:

CREATE TABLE ABC(order_id SERIAL NULL, order_dt INT);
-- ERROR: conflicting NULL/NOT NULL declarations for 
-- column "order_id" of table "abc"

我没有使用PostgreSQL 8.2对其进行测试的环境,但如果允许使用NULL定义order_id,则应将架构更改为NOT NULL