it-swarm.asia

Bagaimana saya bisa menentukan posisi untuk kolom baru di PostgreSQL?

Jika saya memiliki tabel dengan kolom:

id | name | created_date

dan ingin menambahkan kolom, saya menggunakan:

alter table my_table add column email varchar(255)

Kemudian kolom ditambahkan setelah created_date kolom.

Apakah ada cara saya dapat menentukan posisi untuk kolom baru? misalnya jadi saya bisa menambahkannya setelah name dan mendapatkan tabel seperti:

id | name | email | created_date
85
Jonas

ALTER TABLE ADD COLUMN hanya akan menambahkan kolom baru di akhir, sebagai yang terakhir. Untuk membuat kolom baru di posisi lain Anda harus membuat ulang tabel dan menyalin data dari tabel lama/saat ini di tabel baru ini.

62
Marian

Anda harus membuat ulang tabel jika Anda menginginkan pesanan tertentu. Lakukan sesuatu seperti:

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;

Buat indeks sesuai kebutuhan dll.

24
Scott Marlowe

Jika Anda ingin ini hanya untuk penampilan, saya merasa lebih mudah untuk menjaga tampilan per setiap tabel dengan urutan kolom yang diinginkan, dan memilih dari itu daripada tabel.

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;

Untuk semua tujuan lain (seperti menyisipkan, penyatuan) lebih baik untuk selalu menentukan daftar kolom.

-- 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