javoaxian cambió a: javoaxian.me
Este blog se mantendrá como histórico del nuevo javoaxian.me. Por tal motivo, sólo serán creados post que harán referencia a los del nuevo blog. Si hay dudas y comentarios, favor de hacerlos en javoaxian.me.

viernes, 15 de agosto de 2008

Cargar la estructura de una base de datos por medio de una archivo en PosgreSQL

Regularmente si creamos nuestros diagramas entidad relación con alguna herramienta CASE como Erwin o DBDesigner para facilitarnos el diseño de las bases de datos, estas herramientas nos permiten generar un script el cual contiene la sintaxis necesaria para crear la estructura de las tablas, trigger's, etc. o la manera en borrar dichas tablas.

Por tal motivo, el objetivo de este artículo, es explicar como podemos usar este archivo (script) generado con alguna herramiento o hecho a mano, el cual nos permitirá crear o borrar fácilmente la estructura de nuestra base de datos en PostgreSQL. En post siguientes, explicaré como podemos hacer lo mismo para diferentes manejadores de base de datos.

Vamos a comenzar por generar nuestro script, en mi caso el archivo que voy a usar lo llamaré estructuraBD.sql y tendrá la siguiente sintaxis:

CREATE TABLE tipo_usuario (
id NUMERIC(2) NOT NULL,
nombre VARCHAR(100) NOT NULL,
PRIMARY KEY(id)
);

CREATE TABLE estado (
id NUMERIC(2) NOT NULL,
nombre VARCHAR(100) NOT NULL,
PRIMARY KEY(id)
);

CREATE TABLE usuario (
id BIGINT NOT NULL,
tipo_usuario_id NUMERIC(2) NOT NULL,
estado_id NUMERIC(2) NOT NULL,
nombre VARCHAR(50) NOT NULL,
apellido_paterno VARCHAR(50) NOT NULL,
apellido_materno VARCHAR(50) NULL,
sexo NUMERIC(1) NOT NULL,
edad DATE NOT NULL,
PRIMARY KEY(id),
FOREIGN KEY(tipo_usuario_id)
REFERENCES tipo_usuario(id)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
FOREIGN KEY(estado_id)
REFERENCES estado(id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);

Ahora que tenemos el archivo creado, podemos cargar la información del archivo de dos maneras.
La primera será ejecutando el comando psql con la opción -f.

Para fines prácticos, usaré al usuario javoaxian el cual es dueño de la base de datos javoaxian, y en dicha base de datos será donde cargue la estructura contenida en el archivo.

javoaxian@darthmaul:~$ psql -U javoaxian -d javoaxian -f estructuraBD.sql
Password for user javoaxian:
psql:estructuraBD.sql:5: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "tipo_usuario_pkey" for table "tipo_usuario"
CREATE TABLE
psql:estructuraBD.sql:11: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "estado_pkey" for table "estado"
CREATE TABLE
psql:estructuraBD.sql:31: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "usuario_pkey" for table "usuario"
CREATE TABLE

Como podemos ver, nos indica que fueron creadas las tablas así como un índice para sus llaves primarias de cada tabla.

La segunda forma para cargar el script a nuestra base de datos, es abriendo primeramente una sesión de nuestro usuario de la base de datos en la base de datos correspondiente:

javoaxian@darthmaul:~$ psql -U javoaxian -d javoaxian
Password for user javoaxian:
Welcome to psql 8.3.1, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

javoaxian=>

Ahora que ya estamos en nuestra sesión en postgres, ejecutaremos el comando "\i" del prompt de postgres, pasandole como argumento, la ruta del archivo que queremos ejecutar, que para este caso, yo lo tengo en /home/javoaxian/:

javoaxian=> \i /home/javoaxian/estructuraBD.sql
psql:/home/javoaxian/estructuraBD.sql:5: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "tipo_usuario_pkey" for table "tipo_usuario"
CREATE TABLE
psql:/home/javoaxian/estructuraBD.sql:11: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "estado_pkey" for table "estado"
CREATE TABLE
psql:/home/javoaxian/estructuraBD.sql:31: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "usuario_pkey" for table "usuario"
CREATE TABLE
javoaxian=>

Podemos observar que nos aparecen los mismos mensajes de confirmación que en la primera forma para ejecutar el archivo.

Ahora bien, únicamente para concluir, listaremos las tablas creadas en la base de datos, para ello, vamos a ejecutar la siguiente opción:

javoaxian=> \d
List of relations
Schema | Name | Type | Owner
--------+--------------+-------+-----------
public | estado | table | javoaxian
public | tipo_usuario | table | javoaxian
public | usuario | table | javoaxian
(3 rows)

javoaxian=>