2009-08-07 6 views
2

Мой столвставить в базу данных однозначно PostgreSQL

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 ,

Как вы можете добавить вопрос в таблицу автоматически, используя уникальный question_id PostgreSQL?

ответ

12

ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ У вас будет автоматически сгенерировано (последовательное) число из последовательности, которая находится на вашей базе данных. Таким образом, вы можете просто сделать простой:

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

Это вставит AUTO порядковым номером в question_id поле из-за ** questions_question_id_seq ** последовательности.

В качестве альтернативы вместо использования SERIAL в вашем предложении вставки вы также можете использовать последовательность. Но я предпочел бы использовать первое предложение, я предложил:

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

Если в таблице есть столбец 'was_sent_at_time', я бы хотел знать, как вы можете автоматически добавить время в новый столбец. Моя неудачная попытка использует метод 'now()' и явное имя столбца в скобках: 'INSERT INTO questions (title, user_id, wast_sent_at_time) VALUES ('Lorem Ipsun.', 123, now())'. ** Как вы можете добавить время и в таблицу? ** –

+1

@Masi: установите тип столбца was_sent_at_time следующим образом: timestamp not null default current_timestamp –

+0

@Masi: послушайте максимко. Используйте значение CURRENT_TIMESTAMP, чтобы заполнить столбец was_sent_at_time. :-) –

2

Обычно, вам не нужно указать уникальный идентификатор, как это делается на стороне сервера. Вы должны использовать следующее:

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

Автоматическая обработка идентификатор осуществляется последовательностью «questions_question_id_seq», как вы можете увидеть в разделе модификаторов.

2

Вы также можете создать таблицу с помощью

Create Table tbl_1 (id SERIAL , name varchar(30)); 

Вы можете перейти на вводные данные, как

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

Это автоматически создает идентификатор. Использование Serial эквивалентно только последовательности. Вы можете проверить link text

Смежные вопросы