在处理旧版Redshift数据库时,我发现自动增量列的默认标识值不熟悉。 E.g:
create table sometable (row_id bigint default "identity"(24078855, 0, '1,1'::text), ...
令人惊讶的是,我无法找到有关该身份功能的任何文档。我唯一能够挖掘的是:
select * from pg_proc proc
join pg_language lang on proc.prolang = lang.oid
where proc.proname = 'identity';
所以我发现这个函数是内部函数,它的prosrc列只是ff_identity_int64
(不幸的是,不是googleable)。
有人可以向我提供有关其第一和第二个论点的一些信息吗?我的意思是24078855,来自该示例"identity"(24078855, 0, '1,1'::text)
的0。 ('1,1':: text - 这里第一个是起始值,第二个是增量步骤)。但24078855和0对我来说仍然是神秘的。
答案 0 :(得分:0)
我发现第一个参数是表的oid。因此,在您的示例中(未指定架构)
select oid from pg_class where relname = 'sometable'
答案 1 :(得分:0)
"identity"(24078855, 0, '1,1'::text)
作为参考,请查看pg_attrdef
表
答案 2 :(得分:-1)
IDENTITY子句在此处的CREATE TABLE文档中记录:http://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_TABLE_NEW.html#identity-clause
IDENTITY(种子,步骤)
指定该列是IDENTITY列的子句。 IDENTITY列包含唯一的自动生成值。 IDENTITY列的数据类型必须是INT或BIGINT。使用INSERT语句添加行时,这些值以指定为seed的值开头,并按指定为step的数字递增。使用COPY语句加载表时,IDENTITY列可能没用。使用COPY操作,数据并行加载并分发到节点片。为确保标识值是唯一的,Amazon Redshift在创建标识值时会跳过许多值。因此,标识值是唯一且顺序的,但不是连续的,并且顺序可能与源文件中的顺序不匹配。