2009-08-03 15 views

Respuesta

10

Eche un vistazo a pgAdmin - de lejos, la manera más fácil de hacer lo que quiera.
Haga clic con el botón derecho en la tabla, Scripts - Crear.

+0

solo tengo acceso a phpPgAdmin; No soy dueño del servidor. –

+0

Bastante justo. En phpPgAdmin: navegue hasta la tabla, haga clic en Exportar, seleccione "Estructura solamente" y tenga su secuencia de comandos – ChssPly76

+0

Estoy bastante seguro de que debe ser un error en esta instalación; solo muestra una página en blanco en el marco correcto cuando hago eso :/ –

40

Bueno, el más cercano que puede obtener con SQL es:

create table new (
    like old 
    including defaults 
    including constraints 
    including indexes 
); 

Pero no va a copiar todo. Las cosas más importantes que faltan son las CLAVES EXTRAÑAS. 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 vertedero, y cargarlo de nuevo:

pg_dump -s -t old databases | sed 's/old/new/g' | psql 

Pero cuidado, que tan simplista sed también cambiará antiguo al nuevo en otros lugares (por ejemplo, si tiene en su columna de la tabla llamada "is_scolded" se convertirá en "is_scnewed").

La pregunta realmente es más bien: ¿por qué la necesita? Porque para diferentes propósitos, utilizaría diferentes técnicas.

+0

Nota: "incluir restricciones" no funciona en PostgreSQL 8.3 – Ragnar123

+1

Funcionó como un amuleto en Postgres 9.3 :) – Ganapathy

+7

La mejor respuesta. Solo tenga en cuenta que si tiene un valor "serial" o alguna otra columna predeterminada a una secuencia, ¡usará la misma secuencia que la tabla anterior! Entonces, si insertas cosas en cualquier tabla, aumentará para ambas. – sudo

23

Para una copia de esquema simple, use la cláusula similar.

CREATE TABLE new_table_name (like old_table_name including all) 
5

¿Qué tal

CREATE TABLE sample_table_copy AS (SELECT * FROM sample_table WHERE 1 = 2) 

postgresql.org answer

+1

Desafortunadamente, esto no conserva las claves, restricciones o valores predeterminados. – sudo

+1

Una mejor manera de expresar "WHERE 1 = 2" sería 'WHERE false' o no WHERE cláusula en absoluto, pero 'LIMIT 0' en su lugar. –

Cuestiones relacionadas