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

前端 未结 1 1223
别跟我提以往
别跟我提以往 2021-01-19 10:27

Suppose I have a simple table:

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

Is there a way to alter thi

相关标签:
1条回答
  • 2021-01-19 11:13

    I would try to just rank the rows, and use the sequence for future inserts.

    \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;
    

    We get:

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

    Success!

    Let's prepare the table for future inserts:

    -- 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');
    

    Quick test:

    INSERT INTO t2 (val) VALUES ('e');
    INSERT INTO t2 (val) VALUES ('f');
    
    SELECT * FROM t2;
    

    We get:

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

    Hope this helps.

    0 讨论(0)
提交回复
热议问题