【问题标题】:Globally Unique Identifier in VerticaVertica 中的全局唯一标识符
【发布时间】:2014-11-25 06:50:20
【问题描述】:

我将在 Vertica 数据库中创建一些表,我必须在该表上提供全局唯一标识符以唯一标识每一行。请建议怎么做?

【问题讨论】:

    标签: vertica vsql


    【解决方案1】:

    请参考documentation:

    递增值对象的类型

    • 命名序列是按升序或降序生成唯一编号的数据库对象。当应用程序需要表或表达式中的唯一标识符时,最常使用它们。一旦命名序列返回一个值,它就再也不会返回相同的值。命名序列是独立的对象,虽然您可以在表中使用它们的值,但它们并不从属于它们。
    • 自动递增列值:仅可用于数字列类型的序列。向表中添加新行时,自动递增序列会自动为该列分配下一个递增序列值。
    • 标识列:仅可用于数字列类型的序列。

    【讨论】:

    • 感谢克米特。 Vertica 在 sql server 中是否包含类似 NEWID() 的函数?
    • @San 不,它没有。请参阅文档中的序列。
    【解决方案2】:

    您正在寻找一个命名序列。您可以对多个表使用相同的序列:

    -- 2 tables...
    CREATE TABLE tst  (id INT, value varchar(10));
    CREATE TABLE tst2 (id INT, value varchar(10));
    
    -- 1 sequence...
    CREATE SEQUENCE tst_seq;
    
    -- ... said sequence is used by both tables
    ALTER TABLE tst  ALTER COLUMN id set default NEXTVAL('tst_seq');
    ALTER TABLE tst2 ALTER COLUMN id set default NEXTVAL('tst_seq');
    
    -- testing...
    INSERT INTO tst (value) VALUES ('tst');
    INSERT INTO tst2 (value) VALUES ('tst2');
    
    -- success!
    => SELECT * FROM tst;
     id |  value
    ----+---------
      1 | tst
    (1 row)
    
    => SELECT * FROM tst2;
     id |  value
    ----+----------
      2 | tst2
    (1 row)
    

    那么NEXTVAL('named_sequence'),这里在创建表时使用,就相当于你正在寻找的NEWID()。

    【讨论】:

      猜你喜欢
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      • 2012-07-18
      相关资源
      最近更新 更多