2016-07-15 38 views
0

我有一個表稱爲SEQ_TABLE其中有兩列,SEQ_NAME和ID插入表通過獲取序列nextval將在PostgreSQL的

SEQ_NAME  | ID 
---------------------- 
SEQ_TABLE_10 | 1 
SEQ_TABLE_20 | 5 

其中ID爲TABLE_10的COLUMN_1的Max和TABLE_20

現在,我必須通過獲得下一個值SEQ_TABLE插入到TABLE_10中的新記錄。

我已經寫了PostgreSQL的查詢,如下所示:

INSERT INTO TABLE_10 (COLUMN_1, COLUMN_2, COLUMN_3) VALUES ((SELECT nextval(SEQ_TABLE)), 'Bangalore' ,NULL); 

當我執行上面的查詢,這是給下面的錯誤: **********錯誤******* ***

ERROR: column "SEQ_TABLE_10" does not exist 
SQL state: 42703 
Character: 99 

但是,下面的查詢在正常工作的MySQL數據庫

INSERT INTO TABLE_TABLE(COLUMN_1, COLUMN_2, COLUMN_3) VALUES ((SELECT nextval('TABLE_172_SEQ','true')), 'Bangalore' ,NULL); 

什麼是Exact Postgres查詢來實現它PostgreSQL DB?

+0

MySQL不支持序列不像Postgres。所以這意味着您在MySQL中使用的nextval函數可能不是MySQL的內置函數。你能否檢查一下你的MySQL數據庫中是否有用戶定義的名爲nextval的函數?如果你得到這個函數,你可能只是將函數複製到Postgres數據庫並使用它,或者更好地去創建序列,如@apm – Manish

+0

@Manish:MySQL它的工作正常所提到的那樣..問題在於Postgres – Satish

+2

You可能誤解了我的評論。我的意思是MySQL沒有序列,因此沒有機會使用nextval功能。但是你有一個在MySQL中使用的nextval函數調用。我懷疑你在MySQL中使用的nextval可能是用戶定義的函數。你能否檢查一下你的MySQL數據庫中是否有用戶定義的函數名爲「nextVal」? – Manish

回答

0

在PostgreSQL你會用

CREATE TABLE table_10 (id serial PRIMARY KEY, other text NOT NULL); 

然後idinteger型的,在序列創建table_10_id_seqnextval呼叫添加到idDEFAULT條款。

您可以\dpsql檢查此:

\d table_10 
         Table "laurenz.table_10" 
Column | Type |      Modifiers 
--------+---------+------------------------------------------------------- 
id  | integer | not null default nextval('table_10_id_seq'::regclass) 
other | text | not null 
Indexes: 
    "table_10_pkey" PRIMARY KEY, btree (id) 

此外,列屬於表時,表被刪除將被自動刪除。

您插入行省略id列如下:

INSERT INTO table_10 (other) VALUES ('something'); 

然後DEFAULT值將被使用。

如果你想要做同樣的事情「徒步」,例如使用不同的名稱或序列不同的初始值,將工作是這樣的:

CREATE TABLE table_10 (id integer PRIMARY KEY, other text NOT NULL); 
CREATE SEQUENCE table_10_id_seq OWNED BY table_10.id; 
ALTER TABLE table_10 ALTER id SET DEFAULT nextval('table_10_id_seq'); 
相關問題