使用PostgreSQL唯一地向数据库中插入数据

5

我的表格

  question_id   |              title              |      user_id   |
+---------------+---------------------------------+----------------+

它的类型有:

                Column                 |            Type             |                            Modifiers                            
---------------------------------------+-----------------------------+-----------------------------------------------------------------
 question_id                           | integer                     | not null default nextval('questions_question_id_seq'::regclass)
 title                                 | character varying(256)      | 
 user_id                               | integer                     | 

我运行

INSERT INTO questions VALUES (SERIAL, 'question title', 123);

我收到了一个关于使用SERIAL的错误。

如何通过PostgreSQL自动将问题添加到表中并取一个唯一的问题ID?

3个回答

16

如果你使用的是DEFAULT VALUE,它会自动生成一个(序列)号码,该序列在你的数据库中。因此,您只需要简单地执行以下操作:

insert into questions (title, user_id) values ('question_title', 123);

由于 **questions_question_id_seq** 序列的存在,它将在 question_id 字段中插入一个自增数字。

或者,您也可以在插入子句中使用序列而不是 SERIAL。但我更喜欢使用我提出的第一句话:

insert into questions values (nextval('questions_question_id_seq'), 'question_title', 123);

如果表中有一个列名为was_sent_at_time,我想知道您如何自动将时间添加到新列中。我的尝试不成功,使用了now()方法和括号中的显式列名:INSERT INTO questions(title, user_id, wast_sent_at_time) VALUES ('Lorem Ipsun.', 123, now())您如何将时间也添加到表中? - Léo Léopold Hertz 준영
1
@Masi:将was_sent_at_time列的类型设置为以下内容:timestamp not null default current_timestamp。 - Maxim Sloyko
@Masi:听听maksymko的建议。使用CURRENT_TIMESTAMP值来填充你的was_sent_at_time列。 :-) - Pablo Santa Cruz
谢谢大家!你们的最后一个提示让我的SQL查询简化了很多 :) - Léo Léopold Hertz 준영

2

通常情况下,您不需要指定唯一标识符,因为这是在服务器端完成的。您应该使用以下内容:

INSERT INTO questions (title, user_id) VALUES ('question title', 123);

自动 id 处理是由 'questions_question_id_seq' 序列完成的,正如您在修改器部分中所看到的。


2
您可以使用以下方式创建表格:
Create Table tbl_1 ( id SERIAL , name varchar(30));

您可以继续插入数据,例如

insert into tbl_1(name) values('xyz');

这将自动创建ID。 使用Serial相当于仅使用序列。 你可以查看此链接


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接