簡體   English   中英

有沒有辦法在Vertica中的現有表列上設置AUTO_INCREMENT屬性?

[英]Is there a way to set AUTO_INCREMENT property on existing table column in Vertica?

假設我有一個簡單的表:

CREATE TABLE user(
  id INT NOT NULL PRIMARY KEY,
  name VARCHAR(32) NOT NULL,
)

有沒有辦法改變這個表,所以id將成為AUTO_INCREMENT字段?

我試了以下沒有運氣:

  • ALTER TABLE(沒有這樣的語法)
  • 創建具有自動增量ID的另一個表,並從原始數據中復制數據(由於錯誤而無效:無法插入或更新IDENTITY / AUTO_INCREMENT列“id”)

謝謝!

我會嘗試對行進行排名,並將序列用於將來的插入。

\set AUTOCOMMIT 'on'

CREATE TABLE t1 (
    val char(1)
);

INSERT INTO t1 VALUES ('a');
INSERT INTO t1 VALUES ('b');
INSERT INTO t1 VALUES ('c');
INSERT INTO t1 VALUES ('d');

CREATE TABLE t2 (
    id int,
    val char(1)
);

INSERT INTO t2 (val, id)
SELECT val, RANK() OVER (ORDER BY val) as id
FROM t1;

SELECT * FROM t2;

我們得到:

id | val
----+-----
  1 | a
  3 | c
  2 | b
  4 | d

成功!

讓我們為將來的插入准備表格:

-- get the value to start sequence at
SELECT MAX(id) FROM t2;

-- create the sequence
CREATE SEQUENCE seq1 START 5;

-- syntax as of 6.1
-- modify the column to add next value for future rows
ALTER TABLE t2 ALTER COLUMN id SET DEFAULT NEXTVAL('seq1');

快速測試:

INSERT INTO t2 (val) VALUES ('e');
INSERT INTO t2 (val) VALUES ('f');

SELECT * FROM t2;

我們得到:

id | val
----+-----
  4 | d
  2 | b
  3 | c
  6 | f
  1 | a
  5 | e

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM