首页 > 解决方案 > Postgres:如何根据字符串生成唯一编号?

问题描述

我需要在PostgreSQL中进行查询,它将放入一个具有BIGINT类型的列,一个值,这个值应该从两个相邻列的数据连接中唯一获得,并且在其中,记录存储在行中. 这些行不是数字,而只是文字。可能吗?

标签: postgresql

解决方案


不需要生成任何东西。创建一个数据类型为 bigint 的序列/标识列。只允许 Postgres生成数字。然后如前所述,在 2 个字符串上创建一个唯一约束。

-- Postgres v10 and update 
create table some_table( st_id   bigint generated always as identity
                        , col_1  varchar
                        , col_2  varchar
                        , constraint some_table_pk 
                                     primary key (st_id) 
                        , constraint some_table_bk 
                                     unique (col_1, col_2)
                        ) ;
                        
-- For prior to v10 
create table some_table( st_id   bigserial
                        , col_1  varchar
                        , col_2  varchar
                        , constraint some_table_pk 
                                     primary key (st_id) 
                        , constraint some_table_bk 
                                     unique (col_1, col_2)
                        ) ;


                    
               

推荐阅读