it-swarm.dev

Jak mogę określić pozycję nowej kolumny w PostgreSQL?

Jeśli mam tabelę z kolumnami:

id | name | created_date

i chciałbym dodać kolumnę, używam:

alter table my_table add column email varchar(255)

Następnie kolumna jest dodawana po created_date kolumna.

Czy jest jakiś sposób, aby określić pozycję nowej kolumny? na przykład więc mogę dodać go po name i uzyskać tabelę:

id | name | email | created_date
85
Jonas

ALTER TABLE ADD COLUMN doda tylko nową kolumnę na końcu, jako ostatnią. Aby utworzyć nową kolumnę w innej pozycji, musisz ponownie utworzyć tabelę i skopiować dane ze starej/bieżącej tabeli w tej nowej tabeli.

62
Marian

Musisz odtworzyć tabelę, jeśli chcesz mieć określone zamówienie. Po prostu zrób coś takiego:

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;

Utwórz indeksy zgodnie z potrzebami itp.

24
Scott Marlowe

Jeśli chcesz tego tylko dla wyglądu, łatwiej mi jest zachować widok dla każdej tabeli z pożądaną kolejnością kolumn i wybrać z niej zamiast tabeli.

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;

Do wszystkich innych celów (takich jak wstawianie, łączenie) lepiej jest zawsze określać listę kolumn.

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