यदि आप इस तरह एक सीरियल कॉलम जोड़ते हैं, तो मौजूदा पंक्तियां स्वचालित रूप से "मनमानी" क्रम में अपडेट हो जाएंगी।
आईडी जनरेट होने के क्रम को नियंत्रित करने के लिए आपको इसे कई चरणों में करना होगा:
पहले बिना कॉलम जोड़ें एक डिफ़ॉल्ट (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;
फिर उस तालिका के लिए सभी विदेशी कुंजियाँ और अनुक्रमणिकाएँ फिर से बनाएँ।