¿Hay alguna forma de copiar la estructura de una tabla en una nueva tabla, sin datos, incluidas todas las claves y restricciones?
Respuestas:
Para una copia de esquema simple, use la cláusula like.
CREATE TABLE new_table_name ( like old_table_name including all)
Bueno, lo más cercano que puede obtener con SQL es:
create table new (
like old
including defaults
including constraints
including indexes
);
Pero no copiará todo. Las cosas más importantes que faltan son LLAVES EXTRANJERAS. Además, los disparadores tampoco se copian. No estoy seguro de otras cosas.
Otra forma es volcar la estructura de la tabla, cambiar su nombre en el volcado y volver a cargarlo:
pg_dump -s -t old databases | sed 's/old/new/g' | psql
Pero tenga cuidado, que ese sed simplista también cambiará lo antiguo a lo nuevo en otros lugares (por ejemplo, si tiene en la columna de su tabla llamada "is_scolded" se convertirá en "is_scnewed").
La pregunta es más bien: ¿por qué lo necesita? Porque para varios propósitos, usaría diferentes técnicas.
including constraintsno funciona en PostgreSQL 8.3
Para copiar una tabla por completo, también se puede utilizar la forma abreviada con el comando TABLE:
CREATE TABLE films2 AS
TABLE films
WITH NO DATA;
Más detalles aquí
Eche un vistazo a pgAdmin , la forma más sencilla de hacer lo que quiera con mucho.
Haga clic con el botón derecho en la tabla, Scripts - Crear.
Qué tal si
CREATE TABLE sample_table_copy AS (SELECT * FROM sample_table WHERE 1 = 2)
CREATE TABLE new (like old, extra_column text);