web-dev-qa-db-fra.com

CRÉER UNE TABLE COMME une autre table mais avec des colonnes supplémentaires

Existe-t-il un moyen de créer une table qui a la même structure qu'une autre table, mais avec des colonnes supplémentaires? Depuis cette question , je peux copier la structure d'une table avec:

CREATE TABLE new_table_name ( like old_table_name including all)

Et puis je peux ajouter des colonnes une à la fois, avec ALTER TABLE new_table_name ADD COLUMN... mais je cherche un moyen de le faire plus succinctement, comme:

CREATE TABLE new_table_name ( like old_table_name including all), new_col1 new_col1_type, new_col2 new_col2_type,...
7
Albert Rothman

Vous pouvez utiliser la syntaxe ci-dessous;

CREATE TABLE old_table_name (
  id serial,
  my_data text,
  primary key (id)
);

CREATE TABLE new_table_name ( 
  like old_table_name including all,
  new_col1 integer, 
  new_col2 text

);

Le violon est ici

17
Sahap Asci

Non, il n'y a pas de méthode plus succincte pour le faire. Mais ALTER TABLE peut accepter plusieurs arguments,

ALTER TABLE foo
  ADD column bar int,
  ADD column baz int;

Vraiment, si votre objectif est succinct, SQL n'est presque jamais un langage idéal.

3
Evan Carroll

Vous pouvez utiliser le CREATE TABLE AS <query> option, comme détaillé dans documentation .

--Code non testé dans PostgreSQL--

    CREATE TABLE MyNewTable
    AS
    SELECT *, CAST (NULL AS INT) AS IntCol1, CAST( NULL AS VARCHAR(10)) AS StrCol2...
    FROM MyOriginalTable 
     WITH NO DATA;
3
SQLRaptor