postgresql是否插入空值转换为默认值?

yrwegjxp  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(564)

mysql中有一些特性,但postgresql中没有。1.创建一个表并给列一个默认值2.在表中插入一个空值。在mysql中,它将插入默认值;在postgresql中,它将插入空值;我怎样才能让postgresql像mysql那样做呢。我在更改dbms时发现了这个问题。我的应用程序是java代码。orm是hibernate5.1.0。我改变了数据库管理系统,然后许多默认列是不工作的。
mysql数据库

drop table table1;
CREATE TABLE table1
(
  column_1 int PRIMARY KEY AUTO_INCREMENT,
  column_2 timestamp DEFAULT current_timestamp
);
insert into table1(column_2) values(null);
select * from table1;

结果

| column_1 | column_2            |
+----------+---------------------+
|        1 | 2018-04-24 10:00:18 |

pgsql语言

drop table table2;
CREATE TABLE table2
(
column_1 serial PRIMARY KEY,
column_2 timestamp DEFAULT current_timestamp
);
insert into table2(column_2) values (null);
select * from table2;

结果

column_1 | column_2 
----------+----------
        1 |
xvw2m8pv

xvw2m8pv1#

这将插入null。

test=# insert into table2(column_2) values (null);
INSERT 0 1
test=# select * from table2;
 column_1 | column_2 
----------+----------
        1 | [null]
(1 row)

当插入且不包括具有默认值的列时,将插入其默认值。我想你有一个序列可以用来做这个。

test=# insert into table2(column_1) select max(column_1)+1 from table2;
INSERT 0 1
test=# select * from table2;
 column_1 |          column_2          
----------+----------------------------
        1 | [null]
        2 | 2018-04-24 03:44:10.669642
(2 rows)
h7wcgrx3

h7wcgrx32#

我想如果你想在插入时得到默认值,我建议你3种方法:
别把它放在你的问题里。
使用关键字 DEFAULT 作为 insert into table2(column_2) values (DEFAULT); 写入触发器并在插入时处理数据。
希望我的回答能对你有所帮助。

相关问题