【问题标题】:Generating unique ID in postgres在 postgres 中生成唯一 ID
【发布时间】:2011-03-27 18:36:50
【问题描述】:

有没有办法在 postgres 中生成唯一的 id?假设我有两个文件:

文件 1:
a, b, c
d、e、f

文件2:
h, i, j
a, f, h

并且我想将它们插入到同一个表中(这应该是可能的,因为它们具有相同数量的具有相同数据类型的元素),但以后仍然能够单独获取它们。我可以让 postgresql 为我生成一个唯一的 id 吗?

【问题讨论】:

    标签: c++ linux postgresql


    【解决方案1】:

    你当然可以!您可以创建一个loaded_files 表并存储您正在加载的文件的名称。从loaded_files 中检索id 并使用它将数据插入到您的file_items 表中。

    您要求的是一种解决方案,通常在数据加载期间使用应用程序代码或多个 SQL 语句解决。

    【讨论】:

    • 是否可以在不创建额外表的情况下做到这一点?
    • 当然,您只需在应用层生成它并将其插入到文件中...文件名本身就可以很好地插入。当然,您将插入大量附加数据。您所描述的是基本数据库规范化的一个很好的案例。
    【解决方案2】:

    是的,有一种方法可以在 postgres 中生成唯一 ID。听起来你只需要一个sequence

    例如:

    create sequence file_id;
    


    然后在每次加载文件时使用nextval('file_id')。一旦你使用了nextval('file_id'),你可以使用currval('file_id')返回值而不增加序列

    【讨论】:

      【解决方案3】:

      是的,假设您希望唯一的 Id 作为主键:

      CREATE TABLE my_table (id SERIAL PRIMARY KEY,
                             your_other_fields... );
      

      SERIAL 说明符会自动为您执行以下操作:

      CREATE SEQUENCE my_seq START 1;
      CREATE TABLE my_table (id integer PRIMARY KEY DEFAULT nextval('my_seq'));
      

      这将以id = 1 开始您的行,并在每次插入时递增。

      【讨论】:

      • 我不希望它在每次插入时增加。我希望同一文件中的所有行都具有相同的 ID,以便以后可以使用 SELECT * FROM example WHERE uid = 5 (如果 5 是唯一 ID)从特定文件中检索所有条目。
      【解决方案4】:

      【讨论】:

      • 嗯.. 不是真的。我还希望能够打印生成的唯一 ID。
      猜你喜欢
      • 1970-01-01
      • 2012-03-21
      • 2012-07-20
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多