sql >> データベース >  >> RDS >> PostgreSQL

日付順に並べられた既存のテーブルに自動増分列を追加します

    このようなシリアル列を追加すると、既存の行は「任意の」順序で自動的に更新されます。

    IDが生成される順序を制御するには、複数の手順でこれを行う必要があります。

    まず、なしの列を追加します デフォルト(serial デフォルト値を意味します)

    ALTER TABLE tickets ADD COLUMN ticket_id integer;
    

    次に、シーケンスを作成して値を生成します。

    create sequence tickets_ticket_id_seq;
    

    次に、既存の行を更新します

    update tickets 
      set ticket_id = t.new_id
    from (
       select id, nextval('tickets_ticket_id_seq') as new_id
       from tickets
       order by "date"
    ) t
    where t.id = tickets.id;
    

    次に、シーケンスを新しい列のデフォルトにします

    alter table tickets alter column ticket_id set default nextval('tickets_ticket_id_seq');
    

    最後に、シーケンスを列に関連付けます(これはserial バックグラウンドでも実行されます):

    alter sequence tickets_ticket_id_seq owned by tickets.ticket_id;
    

    テーブルが本当に大きい場合(「数千」または「数億」)、新しいテーブルを作成する方が速い場合があります。

    create sequence tickets_ticket_id_seq;
    create table tickets_new
    as
    select id, nextval('activities_ticket_id_seq') ticket_id, "date", status
    from tickets
    order by "date";
    
    drop table tickets cascade;
    alter table tickets_new rename to tickets;
    alter table tickets add primary key (id);
    alter sequence tickets_ticket_id_seq owned by tickets.ticket_id;
    

    次に、そのテーブルのすべての外部キーとインデックスを再作成します。




    1. 空の行を削除する

    2. 絵文字で大文字と小文字を区別せずに値を見つける

    3. QMYSQLドライバーは使用可能ですが、ロードされていません

    4. JPA Qyeryは、範囲間のレコードを検索します