it-swarm.asia

كيف يمكنني تحديد موضع عمود جديد في PostgreSQL؟

إذا كان لدي جدول بالأعمدة:

id | name | created_date

وأود إضافة عمود ، أستخدم:

alter table my_table add column email varchar(255)

ثم يضاف العمود بعد created_date عمود.

هل هناك أي طريقة يمكنني من خلالها تحديد موضع العمود الجديد؟ على سبيل المثال حتى أتمكن من إضافته بعد name والحصول على جدول مثل:

id | name | email | created_date
85
Jonas

ALTER TABLE ADD COLUMN سيضيف العمود الجديد فقط في النهاية ، كآخر عمود. لإنشاء عمود جديد في موضع آخر ، تحتاج إلى إعادة إنشاء الجدول ونسخ البيانات من الجدول القديم/الحالي في هذا الجدول الجديد.

62
Marian

ستحتاج إلى إعادة إنشاء الجدول إذا كنت تريد ترتيبًا معينًا. افعل شيئًا مثل:

alter table tablename rename to oldtable;
create table tablename (column defs go here);
insert into tablename (col1, col2, col3) select col2, col1, col3 from oldtable;

إنشاء فهارس حسب الحاجة وما إلى ذلك.

24
Scott Marlowe

إذا كنت تريد هذا فقط للمظهر ، أجد أنه من الأسهل الاحتفاظ بعرض لكل جدول بترتيب الأعمدة المطلوب ، والاختيار منه بدلاً من الجدول.

create table my_table (
create view view_my_table as
  select id, name, created_date from my_table;

-- adding a new column
begin;
alter table my_table add column email varchar(255);
drop view view_my_table;
create view view_my_table as
  select id, name, email, created_date from my_table;
commit;

لجميع الأغراض الأخرى (مثل إدراج ، اتحاد) ، من الأفضل دائمًا تحديد قائمة الأعمدة.

-- bad
insert into my_table values (...);
(select * from my_table)
  union all
(select * from my_table);

-- good
insert into my_table (id, name, email, created_date) values (...);
(select id, name, email, created_date from my_table)
  union all
(select id, name, email, created_date from my_table);
3
Simon Perepelitsa