1

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

4

2 回答 2

0

请参考文档

递增值对象的类型

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

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

-- 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()你要找的了。

于 2014-11-25T11:49:11.143 回答