Redshift内部“身份”功能的签名

时间:2017-10-31 08:34:17

标签: amazon-redshift

在处理旧版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对我来说仍然是神秘的。

3 个答案:

答案 0 :(得分:0)

我发现第一个参数是表的oid。因此,在您的示例中(未指定架构)

select oid from pg_class where relname = 'sometable'

答案 1 :(得分:0)

"identity"(24078855, 0, '1,1'::text)
  1. 表OID
  2. 从0开始的列索引
  3. IDENTITY子句​​提供的参数的文本表示形式

作为参考,请查看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在创建标识值时会跳过许多值。因此,标识值是唯一且顺序的,但不是连续的,并且顺序可能与源文件中的顺序不匹配。