it-swarm-eu.dev

Jak mohu určit pozici pro nový sloupec v PostgreSQL?

Pokud mám tabulku se sloupci:

id | name | created_date

a chtěl bych přidat sloupec, který používám:

alter table my_table add column email varchar(255)

Poté se sloupec přidá za created_date sloupec.

Existuje způsob, jak určit polohu nového sloupce? např. takže ji mohu přidat za name a získat tabulku jako:

id | name | email | created_date
85
Jonas

ALTER TABLE ADD COLUMN přidá nový sloupec na konec jako poslední. Chcete-li vytvořit nový sloupec na jiné pozici, musíte znovu vytvořit tabulku a zkopírovat data ze staré/aktuální tabulky v této nové tabulce.

62
Marian

Budete-li chtít určitou objednávku, musíte tabulku znovu vytvořit. Jen udělej něco jako:

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;

Vytvořte indexy podle potřeby atd.

24
Scott Marlowe

Pokud to chcete jen pro pohledy, je pro mě jednodušší udržet si přehled pro každou tabulku s požadovaným pořadím sloupců a vybrat ji místo tabulky.

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;

Pro všechny ostatní účely (jako je vložení, spojení) je lepší vždy určit seznam sloupců.

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