2009-08-07 7 views
2

Mein TischUm in eine Datenbank INSERT eindeutig durch PostgreSQL

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

Die Typen sind

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

Ich betreibe

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

ich einen Fehler über die Verwendung von SERIAL erhalten .

Wie können Sie die Frage automatisch zu der Tabelle hinzufügen, indem Sie eine eindeutige Frage-ID von PostgreSQL verwenden?

Antwort

12

DEFAULT VALUE Sie werden automatisch eine (Serien-) Nummer aus einer Sequenz generieren, die sich auf Ihrer DataBase befindet. So können Sie tun, nur ein einfaches:

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

Es fügt eine AUTO fortlaufende Nummer in Feld question_id wegen ** ** questions_question_id_seq Folge.

Alternativ können Sie anstelle der Verwendung von SERIAL in Ihrer INSERT-Klausel auch die Sequenz verwenden. Aber ich würde lieber den ersten Satz verwendet, schlug ich vor:

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

Wenn es eine Spalte 'was_ent_at_time' in der Tabelle ist, würde ich gerne wissen, wie Sie die Zeit automatisch der neuen Spalte hinzufügen können. Mein erfolgloser Versuch verwendet die Methode 'now()' und den expliziten Spaltennamen in den Klammern: 'INSERT INTO Fragen (title, user_id, wast_sent_at_time) VALUES ('Lorem Ipsun.', 123, now())'. ** Wie können Sie die Zeit auch der Tabelle hinzufügen? ** –

+1

@Masi: Legen Sie den Spaltentyp was_sent_at_time wie folgt fest: timestamp not null default current_timestamp –

+0

@Masi: hören Sie auf maksymko. Verwenden Sie den Wert CURRENT_TIMESTAMP, um die Spalte was_s_ent_at_time zu füllen. :-) –

2

Normalerweise, Sie brauchen nicht auf die eindeutige ID angeben, da diese serverseitige erfolgt. Sie sollten Folgendes verwenden:

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

Automatische id Handhabung von ‚questions_question_id_seq‘ Sequenz erfolgt, wie Sie in Modifikator Abschnitt sehen.

2

Sie auch Tabelle

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

Verwendung erstellen können Sie zum Einfügen von Daten wie

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

Diese erstellt automatisch die ID gehen kann. Die Verwendung von Serial entspricht nur der Sequenz. Sie können überprüfen link text

Verwandte Themen