2012-06-24 152 views
24

¿Hay alguna manera de establecer la PRIMARY KEY en una sola instrucción "CREATE TABLE AS"?CREAR TABLA AS con PRIMARY KEY en una instrucción (PostgreSQL)

Ejemplo - Me gustaría que el siguiente para ser escrito en 1 comunicado en lugar de 2:

CREATE TABLE "new_table_name" AS SELECT a.uniquekey, a.some_value + b.some_value FROM "table_a" AS a, "table_b" AS b WHERE a.uniquekey=b.uniquekey; 
ALTER TABLE "new_table_name" ADD PRIMARY KEY (uniquekey); 

¿Hay una mejor manera de hacer esto en general (se supone que hay más de 2 mesas, por ejemplo, 10)?

Respuesta

28

De acuerdo con el manual: create table y create table as puede:

  • crear la tabla con clave primaria en primer lugar, y el uso de seleccione en tarde
  • crear tabla como primero, y el uso agregar la clave principal posterior

Pero no ambos crear tabla como con clave principal - lo que usted quería.

+6

De las dos opciones, la creación de la clave principal (y su índice asociado) * después * Los datos se cargan probablemente será más rápido . – kgrittn

1

No, no hay una manera más corta de crear la tabla y la clave principal.

7

Si desea crear una nueva tabla con la misma estructura de la tabla de otra tabla, puede hacer esto en una declaración (tanto en la creación de una nueva tabla y el establecimiento de la clave principal) así:

create table mytable_clone (like mytable including defaults including constraints including indexes); 
-4

es posible hacerlo de esta manera

CREATE TABLE IOT (EMPID,ID,Name, CONSTRAINT PK PRIMARY KEY(ID,EMPID)) 
ORGANIZATION INDEX NOLOGGING COMPRESS 1 PARALLEL 4 
AS SELECT 1 as empid,2 id,'XYZ' Name FROM dual; 
+0

No es válido para Postgres –

+0

Parece que la sintaxis de Oracle – Gary

0

bien en MySQL, tanto es posible en un solo comando

el comando es

create table new_tbl (PRIMARY KEY(`id`)) as select * from old_tbl; 

donde es id columna con clave primaria de old_tbl

hecho ...

+0

Downvoted ya que esta es la sintaxis de mysql, no postgres (según la pregunta). Y no es posible en postgres. – erikreed

+1

tengo exactamente el mismo problema en mysql al mismo tiempo de la pregunta publicada y yo mismo lo resolví con este comando, así que creo que esto puede ser útil para mi amigo aquí. (Además, no tengo permiso para comentar aún, y pensé que SQL la sintaxis será la misma para Postgre SQL, así que publiqué esto como respuesta) de todos modos, gracias por exprimir mi conocimiento sobre postgre sql ... – kaushikC

+0

voto superior, incluso si no fue la pregunta, fue útil para mí;) – karen

Cuestiones relacionadas