自动生成新的非空列的唯一用户名

时间:2018-03-02 23:12:27

标签: sql postgresql ddl

我有一个现有的表user_accounts,并希望添加一个必须唯一且不可为空的新列username。对于现有用户,我认识到我必须使用数据填充列。我想填充列,以便它可以像' username1',' username2' .....每行。我想做这样的事情:

BEGIN;
i =0;
ALTER TABLE user_accounts ADD COLUMN username character varying(80);
UPDATE mytable SET mycolumn = username + i;
i++;
ALTER TABLE user_accounts ALTER COLUMN username SET NOT NULL;
COMMIT;

^^在postgres ddl中可以使用以下内容吗?

1 个答案:

答案 0 :(得分:0)

假设每行都有唯一的ID,您可以这样做:

update user_accounts
    set mycolumn = 'username' || seqnum;
    from (select ua.*, row_number() over (order by id) as seqnum
          from user_accounts ua
         ) ua
    where ua.useraccountid = user_accounts.useraccountid;