在pgsql中,有沒有辦法讓表中有多個值,然後選擇其中的一個(比如other_id),找出它的最高值,並將每個新條目放在表中從該值增加。將列的數據類型更改爲串行
我想這只是太容易有工作的機會..
ALTER TABLE address ALTER COLUMN new_id TYPE SERIAL
____________________________________
ERROR: type "serial" does not exist
感謝任何見解!
在pgsql中,有沒有辦法讓表中有多個值,然後選擇其中的一個(比如other_id),找出它的最高值,並將每個新條目放在表中從該值增加。將列的數據類型更改爲串行
我想這只是太容易有工作的機會..
ALTER TABLE address ALTER COLUMN new_id TYPE SERIAL
____________________________________
ERROR: type "serial" does not exist
感謝任何見解!
在docs快速瀏覽告訴你,
The data types smallserial, serial and bigserial are not true types but merely a notational convenience for creating unique identifier columns
如果你想使現有的(整數)列「串行」,只是手動創建序列工作(任意名稱),請將其當前值設置爲當前address.new_id
值的最大值(或更大值),並將其設置爲address.new_id
列的默認值。
要設置序列的值,請參見here。
SELECT setval('address_new_id_seq', 10000);
這只是一個例子,使用自己的序列的名字(任意的,你創建一個),以及一些比你列的最大電流值。
更新:由盧卡斯的回答中指出(這應該是acccepted一個),你也應該指定的列序‘屬於’使用CREATE/ALTER SEQUENCE ... OWNED BY ...
查找到PostgreSQL文檔datatype serial。串行只是簡短的。
CREATE TABLE tablename (
colname SERIAL
);
等同於指定:
CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename (
colname integer NOT NULL DEFAULT nextval('tablename_colname_seq')
);
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;
也許你能解釋一點,爲什麼你需要一個新的序列標識符添加到可能已經有一個主鍵的表?你想用串行標識符替換現有的主鍵嗎?這一切的背景是什麼? – 2013-05-10 03:50:08
@CraigRinger在我最後一個問題中,我無法導入數據庫。我決定,因爲我的系統需要一些重要的升級,所以要在明天的工作時間處理。我只需要訪問幾個表格。所以我帶了一張桌子,但是在表格中控制增量列的順序是導致傳輸問題的原因。我沒有運氣改變列作爲主鍵,所以我想我可以使它成爲一個「串行」,從表的當前最高值開始。做一個新的col,並使其成爲PrimKey會更容易嗎? – 1252748 2013-05-10 04:06:11
最好鏈接到相關背景下需要的任何以前的問題。你怎麼「轉移」它? 「沒有任何運氣」在某種意義上?確切的命令,確切的錯誤消息等。 – 2013-05-10 04:08:19