2016-04-30 12 views
0

PostgreSQL 9.4テーブルに一意のIDレコードを挿入します。私はすべてのINSERTクエリのためのユニークなIDを生成するにはどうすればよいPostgreSQL 9.4テーブルの一意のID

INSERT INTO ACCOUNT_HISTORY(ID, ACCOUNT_ID, USERNAME, COMMENT, CREATED) VALUES (?, (select ID from ACCOUNT where USER_NAME = ?), ?, ?, CURRENT_DATE) 

CREATE TABLE ACCOUNT_HISTORY(
ID INTEGER NOT NULL, 
ACCOUNT_ID INTEGER, 
USERNAME TEXT, 
COMMENT TEXT, 
CREATED DATE 
) 
; 

CREATE INDEX IX_RELATIONSHIP8 ON ACCOUNT_HISTORY (ACCOUNT_ID) 
; 

答えて

2

使用serial:次に

CREATE TABLE ACCOUNT_HISTORY (
    ID SERIAL, 
    ACCOUNT_ID INTEGER, 
    USERNAME TEXT, 
    COMMENT TEXT, 
    CREATED DATE 
); 

insert声明の中で、それが含まれていません。

INSERT INTO ACCOUNT_HISTORY(ACCOUNT_ID, USERNAME, COMMENT, CREATED) 
    SELECT ID, ?, ?, ?, CURRENT_DATE 
    FROM ACCOUNT 
    WHERE USER_NAME = ?; 

EDIT:

あなたは、テーブル内のデータを持っている場合は(あなたが「ドンそれをドロップしたくない):

create temporary table temp_account_history as 
    select * 
    from account_history; 

drop account_history; 

CREATE TABLE ACCOUNT_HISTORY (
    ID SERIAL, 
    ACCOUNT_ID INTEGER, 
    USERNAME TEXT, 
    COMMENT TEXT, 
    CREATED NOT NULL DEFAULT CURRENT_DATE 
); 

INSERT INTO ACCOUNT_HISTORY(ACCOUNT_ID, USERNAME, COMMENT, CREATED) 
    SELECT ACCOUNT_ID, USERNAME, COMMENT, CREATED 
    FROM TEMP_ACCOUNT_HISTORY; 

CREATEDにもデフォルト値が設定されているため、以降の挿入にもその値を含める必要はありません。

+0

このソリューションを使用するインセットにはどのようなSQL文を使用しますか。私のSQLクエリをどのように編集する必要がありますか? –

+0

@PeterPenzov。 。 。テーブルを正しく再作成してください。すでにテーブルにデータがある場合は、それを一時テーブルにコピーします。最初のテーブルを削除します。それを再定義し、データをその中に挿入し直します。 –

+0

もう1つの質問は、Oracleデータベースの同様のソリューションですか? –