3. PostgreSQL
PostgreSQL es un sistema de gestión de base de datos relacional (SGBDR) orientada a
objetos y libre (gratuito) y de código abierto (open source), publicado bajo la licencia
BSD(Berkeley Software Distribution). Como muchos otros proyectos open source, el
desarrollo de PostgreSQL no es controlado por una sola empresa sino que está dirigido
por una comunidad de desarrolladores y organizaciones comerciales las cuales
trabajan en su desarrollo. Dicha comunidad es denominada el PGDG (PostgreSQL
Global DevelopmentGroup).
Algunas de las características de PostgreSQL:
Alta concurrencia: mediante un sistema denominado MVCC (Acceso concurrente
multiversión) PostgreSQL permite que mientras un proceso escribe en una tabla,
otros accedan a la misma tabla sin necesidad de bloqueos. Cada usuario obtiene
una visión consistente de lo último a lo que se le hizo commit. Esta estrategia es
superior al uso de bloqueos por tabla o por filas común en otras bases,
eliminando la necesidad del uso de bloqueos explícitos.
Amplia variedad de tipos de datos nativos:
Números de precisión arbitraria.
Texto de largo ilimitado.
Figuras geométricas (con una variedad de funciones asociadas).
Direcciones IP (IPv4 e IPv6).
Bloques de direcciones estilo CIDR.
Direcciones MAC.
Arrays.
Además, los usuarios pueden crear sus propios tipos de datos, los que pueden
ser por completo indexables gracias a la infraestructura GiST de PostgreSQL.
Algunos ejemplos son los tipos de datos GIS creados por el proyecto PostGIS.
Claves ajenas (Llaves ajenas, Claves Foráneas ó ForeignKeys).
Disparadores (triggers): un disparador o trigger se define en una acción
específica basada en algo ocurrente dentro de la base de datos. En PostgreSQL
esto significa la ejecución de un procedimiento almacenado basado en una
determinada acción sobre una tabla específica. Ahora todos los disparadores se
definen por seis características:
El nombre del disparador o trigger.
El momento en que el disparador debe arrancar.
El evento del disparador deberá activarse sobre...
La tabla donde el disparador se activará.
La frecuencia de la ejecución.
La función que podría ser llamada.
Vistas (Views).
Integridad transaccional.
4. Herencia de tablas.
Tipos de datos y operaciones geométricas.
Soporte para transacciones distribuidas: PostgreSQL permite integrarse en un
sistema distribuido formado por varios recursos (p.ej, una base de datos
PostgreSQL, otra Oracle, una cola de mensajes IBM MQ JMS y un ERP SAP)
gestionado por un servidor de aplicaciones donde el éxito ("commit") de la
transacción goblal es el resultado del éxito de las transacciones locales.
Cómo descargar e instalar PostgreSQL
Abriremos un navegador web y accederemos a la URL:
http://www.postgresql.org/download/windows/
Y descargamos la versión para nuestro pc (32 o 64)bits.
Una vez descargado el archivo de instalación de PostgreSQL (postgresql-9.3.0-beta1-windows)
pulsaremos con el botón derecho del ratón sobre él y seleccionaremos "Ejecutar como
administrador":
5. Si tenemos activado el control de cuentas de usuario nos mostrará una advertencia con el
texto "¿Desea permitir que este programa realice cambios en el equipo?", pulsaremos "Sí"
para continuar con la instalación de PostgreSQL:
Se iniciará el asistente para instalar PostgreSQL, pulsaremos "Siguiente":
Indicaremos la carpeta de instalación de PostgreSQL, donde se guardarán los
ejecutables, librerías y ficheros de configuración de PostgreSQL:
6. Indicaremos también la carpeta donde se guardarán los datos por defecto de
PostgreSQL:
Introduciremos la contraseña para el superusuario "postgres" que será con el que
iniciemos sesión para administrar la base de datos:
Introduciremos el puerto de escucha para la conexión con el servidor PostgreSQL, por
defecto el 5432:
7. Seleccionaremos la configuración regional:
Pulsaremos "Siguiente" para iniciar la instalación definitiva del servidor PostgreSQL
en Microsoft Windows 8:
Se iniciará el asistente para instalar el motor de base de datos PostgreSQL, que creará
las carpetas oportunas, copiará los ficheros necesarios y creará el servicio Windows
para iniciar de forma automática el motor de base de datos:
8. Si hemos marcado la opción de StackBuilder, se iniciará, seleccionaremos
"PostgreSQLonport 5432" y pulsaremos "Next":
Seleccionaremos las aplicaciones, componentes y herramientas a instalar y pulsaremos
"Next" (en nuestro caso cancelaremos StackBuilder pues no instalaremos más
componentes):
El asistente para instalar el servodprPostgreSQL habrá creado un servicio que estará
iniciado y en tipo de inicio automático llamado "postgresql-9.0":
9. Administración de PostgreSQL
Para el acceso a la administración del motor de base de datos PostgreSQL
accederemos al botón "Iniciar" -"pgAdmin III":
Desplegaremos "Server Groups", dentro desplegaremos "Servidores" y dentro de éste
pulsaremos con el botón derecho del ratón sobre "PostgreSQL 9.0 (localhost:5432), en
el menú emergente seleccionaremos "Conectar":
Introduciremos la contraseña para el superusuariopostgres (la contraseña introducida
en la instalación):
10. Si todo es correcto nos conectaremos al servidor PostgreSQL, desde pgAdmin
podremos configurar y administrar el servidor de PostgreSQL:
Crear base de datos para guardar tablas y vistas
en PostgreSQL
Para crear una nueva base de datos en PostgreSQL abriremos pgAdmin, pulsaremos
con el botón derecho del ratón sobre "Bases de datos", seleccionaremos "Nueva Base
de Datos":
En la pestaña "Propiedades" introduciremos los siguientes datos:
Nombre: nombre de la base de datos, en nuestro caso "bdajpdsoft".
Propietario: seleccionaremos el usuario creado anteriormente "ajpdsoft".
Codificado: seleccionaremos UTF8.
Tablespace: seleccionaremos el tablespace creado anteriormente
"tb_ajpdsoft".
Colación: seleccionaremos "Spanish_Spain.1252".
11. Tipo carácter: seleccionaremos "Spanish_Spain.1252".
Pulsaremos "OK" para crear la base de datos:
El script SQL para crear una base de datos postgreSQL desde la línea de comandos:
CREATE DATABASE diego
WITH ENCODING='UTF8'
OWNER=diego
LC_COLLATE='Spanish_Spain.1252'
LC_CTYPE='Spanish_Spain.1252'
CONNECTION LIMIT=-1
TABLESPACE=tb_diego;
Crear una tabla de ejemplo en PostgreSQL
Para crear una tabla pulsaremos con el botón derecho del ratón sobre "Tablas" (dentro
del esquema) y seleccionaremos "Nueva Tabla":
12. Introduciremos el nombre de la tabla, por ejemplo "facturas", el propietario
"ajpdsoft", el Tablespace "tb_ajpdsoft":
En la pestaña "Columnas" pulsaremos "Añadir":
Introduciremos el nombre de la columna, por ejemplo "codigo", el tipo de datos (para
el autoincremento en PostgreSQL seleccionaremos "serial"), puesto que esta columna
será clave primaria marcaremos "No Nulo":
13. De la misma forma, añadiremos el resto de las columnas para la tabla "facturas": fecha
(de tipo "date"), codigocliente (de tipo "integer"), numero (de tipo "character(40)"),
importe (de tipo "money") y observacion (de tipo "text"):
En la pestaña "Restricciones", para añadir una clave primaria para la tabla,
seleccionaremos "Clave Primaria" y pulsaremos "Añadir":
14. En "Nombre", introduciremos el nombre para la clave primaria, por ejemplo:
cp_codigo:
En la pestaña "Columnas" seleccionaremos "codigo" y pulsaremos "Añadir":
Pulsaremos "OK" para crear la clave primaria para el campo "codigo":
15. Y ya tendremos creada la tabla "facturas" de PostgreSQL:
Manual de Usuario de Postgres SQL
URL:
https://www.google.com.ec/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&cad=rja&ved=0C
FAQFjAD&url=https%3A%2F%2Fforja.rediris.es%2Fdocman%2Fview.php%2F312%2F454%2FPo
stgres-User.pdf&ei=gFjXUrGOMqa2sASzoYGYAQ&usg=AFQjCNECuP0iT4H2gbewwRfptcmpdeYTw&sig2=VS54toSf-ztVhsJ4rl5lAQ
SENTENCIAS SQL:
1. Crear un Usuario.
[postgres@GNU][~]$ createuserluix
Clase_Maritima=> CREATE USER pilar withpassword ‘pilar’;
2. Listando todos los usuarios
Clase_Maritima=> du
Clase_Maritima=> SELECT * FROM pg_user ;
3. Cambiando el Password de un Usuario.
Clase_Maritima=> ALTER USER pilar withpassword ’123456′;
4. Cambiando el nombre de un usuario
Clase_Maritima=> ALTER USER pilar RENAME TO manolo;
5. Borrando Usuarios
[postgres@GNU][~]$ dropuser pilar
Clase_Maritima=>dropuser pilar;
16. 6. Crear una Base Datos
[postgres@GNU][~]$ createdbMaritima
Clase_Maritima=> CREATE DATABASE marimar;
7. Listando todas las Base Datos
Clase_Maritima=> l
Clase_Maritima=> SELECT datname FROM pg_database ;
[postgres@GNU][~/data]$ psql -l
8. Cambiando el nombre de una Base datos
Clase_Maritima=> ALTER DATABASE marimar RENAME TO Maritmar;
9. Borrando una Base Datos
postgres@GNU][~]$ dropdatadbMaritima
Clase_Maritima=>dropdatabaseMaritima;
10. Accesando a una Base Datos con un usuario.
[postgres@GNU][~]$ psql -U pilar -h localhost -d Maritima
11. Creando Tablas
CREATE TABLE Pollo (
Codigochar(5),
Nombre varchar(40),
Peso integer ,
Edad date,
Familavarchar(10)
);
12. Creando tabla desde un SELECT
Clase_Maritima=>createtable Mar as SELECT * FROM pollo;
13. Listando las Tablas creadas
Clase_Maritima=>dt
Clase_Maritima=> SELECT * FROM pg_tables;
14. Viendo la Estructura de una Tabla
Clase_Maritima=>d pollo
15. Cambiando el nombre de una Tabla
Clase_Maritima=> ALTER TABLE pollo RENAME TO pollos;
16. Cambiando el nombre de un campo de una Tabla
Clase_Maritima=> ALTER TABLE pollos RENAME edad TO Fecha_Muerte;
17. Agregandole un campo a una tabla
Clase_Maritima=> ALTER TABLE pollos ADD column sex char(1);
18. Borrando un campo de una tabla
Clase_Maritima=> ALTER TABLE pollos DROP sex;
19. Cambiando el tipo de dato de una columna de una tabla.
Clase_Maritima=> ALTER TABLE pollos ALTER codigo TYPE varchar;
20. Borrando una Tabla
Clase_Maritima-> DROP TABLE pollo;
21. Insertando Datos en una Tabla
Clase_Maritima=> INSERT INTO pollo VALUES ( ’1′, ‘Gallina’, 8, Current_date, ‘Criollo’);
22. Insertando datos a partir de un SELECT
Clase_Maritima=> INSERT INTO pollos (nombre, famila) SELECT bandera, codigo FROM
buque ;
23. Selecionado datos de una tabla
Clase_Maritima=> SELECT * FROM pollo ;
24. Muestra el plan de ejecución de la sentencia
Clase_Maritima=# EXPLAIN SELECT * FROM buque ;
25. Para saber la cantidad de registro en una tabla (Count)
Clase_Maritima=# SELECT count(*) FROM buque ;
26. Selecionar los registros no repetidos de una campo (DISTINCT)
Clase_Maritima=# SELECT distinct(bandera) FROM buque ;
17. 27. Actualizando datos de una tabla
Clase_Maritima=> UPDATE pollo SET nombre = ‘Gallo’ WHERE codigo=1;
28. Borrando registros de una tabla.
Clase_Maritima=> DELETE FROM pollo WHERE codigo =’1′;
29. Truncando tablas
Clase_Maritima=> TRUNCATE pollo ;
30. Agregando una llave primaria a un campo de una tabla
Clase_Maritima=> ALTER TABLE pollos ADD CONSTRAINT pk_codigo PRIMARY KEY (codigo);
31. Creando una Vista
Clase_Maritima=# CREATE VIEW v_pollo as SELECT * FROM pollos ;
32. Seleccionando datos de una Vista
Clase_Maritima=# SELECT * FROM v_pollo ;
33. Viendo las Vistas Creadas
Clase_Maritima=#dv
Clase_Maritima=# SELECT viewname FROM pg_views ;
34. Borrando una Vista
Clase_Maritima=# DROP VIEW v_pollo ;
35. Agreando una llave foraneas a un campo de una tabla
Clase_Maritima=> ALTER TABLE pollos ADD CONSTRAINT pk_codigo FOREIGN KEY (codigo)
REFERENCES buque (codigo);
36. Borrando una un CONSTRAINT
Clase_Maritima=> ALTER TABLE pollos DROP CONSTRAINT pk_codigo;
37. Agregando un CONSTRAINT CHECK a un campo
Clase_Maritima=> ALTER TABLE pollos ADD CONSTRAINT c_checkcheck (fecha_muerte>
’2007-01-01′);
38. Agregando un CONSTRAINT DEFAULT a un campo
Clase_Maritima=> ALTER TABLE pollos ALTER peso SET DEFAULT 23;
39. Creando un índice a una tabla
Clase_Maritima=> CREATE INDEX pkU_pollo ON pollos (codigo);
40. Creando un indiceunico
Clase_Maritima=> CREATE UNIQUE INDEX pku_pollo ON pollos (peso );
41. Cambiandole el nombre a un indice
Clase_Maritima=> ALTER INDEX pku_pollo RENAME TO pki_pollo;
42. Ver los indices creados en una Base Datos
Clase_Maritima=>di
Clase_Maritima=> SELECT indexname, tablename FROM pg_indexes;
43. Borrando un indice
Clase_Maritima=> DROP INDEX pku_pollo ;
44. Creando un sequence
Clase_Maritima=> CREATE SEQUENCE s_maristartwith 1000 incrementby 2 maxvalue 1100;
45. Ver el siguente valor de un sequence
Clase_Maritima=> SELECT nextval(‘s_mari’);
46. Ver el valor actual de un sequence
Clase_Maritima=> SELECT currval(‘s_mari’);
47. Modificar el valor inicial de un sequence
Clase_Maritima=> SELECT setval(‘s_mari’, 1000);
48. Utilizando INNER JOIN
Clase_Maritima=# SELECT * FROM files f InnerJoinlineas l ON l.codigo=f.linea;
49. Utilizando LEFT OUTER JOIN
Clase_Maritima=# SELECT * FROM files f LEFT OUTER JOIN lineas l ON l.codigo=f.linea;
50. Utilizando RIGHT OUTER JOIN
Clase_Maritima=# SELECT * FROM files f RIGHT OUTER JOIN lineas l ON l.codigo=f.linea;
51. Utilizando FULL OUTER JOIN
Clase_Maritima=# SELECT * FROM files f FULL OUTER JOIN lineas l ON l.codigo=f.linea;
18. 52. Utilizando LEFT OUTER JOIN
Clase_Maritima=# SELECT * FROM files f LEFT Joinlineas l USING(Linea);
53. Utilizando operador Mayor que
Clase_Maritima=# SELECT buque, loa FROM buque WHERE loa > 1000;
54. Utilizando operador Menor que
Clase_Maritima=# SELECT buque, loa FROM buque WHERE loa < 1000;
55. Utilizando operador Igual
Clase_Maritima=# SELECT buque, loa FROM buque WHERE buque=’AIDA’;
56. Utilizando operador Menor o igual que
Clase_Maritima=# SELECT buque, loa FROM buque WHERE loa <= 1000;
57. Utilizando operador Mayor o igual que
Clase_Maritima=# SELECT buque, loa FROM buque WHERE loa >= 1000;
58. Utilizando operador No igual
Clase_Maritima=# SELECT buque, loa FROM buque WHERE loa <> 1000;
Clase_Maritima=# SELECT buque, loa FROM buque WHERE loa != 1000;
59. Utilizando operador Concatenación
Clase_Maritima=# SELECT buque||’ ‘ ||dueno FROM buque ;
60. Utilizando EXISTS
SELECT * FROM boardingclerk WHERE exists(SELECT 1 FROM files);
61. Utilizando conector IN
SELECT * FROM files WHERE boarding_clerk IN (31, 33, 35);
SELECT * FROM files WHERE boarding_clerk NOT IN (31, 33, 35);
62. La cláusula ORDER BY
Clase_Maritima=# SELECT * FROM puertos ORDER BY 1 ASC;
Clase_Maritima=# SELECT codigo, puerto FROM puertos ORDER BY puerto DESC;
63. La cláusula GROUP BY
Clase_Maritima=# SELECT buque, count(*) FROM files GROUP BY buque;
64. Funciones para calcular
Clase_Maritima=# SELECT AVG(LOA) FROM BUQUE;
Clase_Maritima=# SELECT MAX(LOA) FROM BUQUE;
Clase_Maritima=# SELECT MIN(LOA) FROM BUQUE;
Clase_Maritima=# SELECT SUM(LOA) FROM BUQUE;
65. Operaciones de conjunto (UNION).
SELECT linea FROM files
union
SELECT codigo FROM lineas ;
66. Operaciones de conjunto (UNION ALL).
SELECT linea FROM files
unionall
SELECT codigo FROM lineas ;
67. Operaciones de conjunto (INTERSECT).
SELECT linea FROM files
INTERSECT
SELECT codigo FROM lineas ;
68. Utilizando operadores aritméticos
FCLD=# SELECT 8+3 as Suma;
FCLD=# SELECT 8-3 as Resta;
FCLD=# SELECT 8/3 as Divide;
FCLD=# SELECT 8*3 as Multiplica;
69. Utilizando Funciones Matemáticas
FCLD=# SELECT 20-233 as Resta ; — El resultado Sera Negativo
FCLD=# SELECT abs(20-233) as Resta ; Esta Funcion
FCLD=# SELECT cbrt(27); — Retorna El cubo
FCLD=# SELECT round(99.4);
19. FCLD=# SELECT round(99.2, 3);
FCLD=# SELECT pi();
FCLD=# SELECT trunc(99.1);
70. Funciones Cadenas
FCLD=# SELECT ‘Jose’||’Paredes’;
FCLD=# SELECT bit_length(‘k’) ;
FCLD=# SELECT char_length(‘jose’);
FCLD=# SELECT lower(‘GNU’);
FCLD=# SELECT upper(‘gnu’);
FCLD=# SELECT initcap(‘manuel’);
FCLD=# SELECT ascii(‘K’);
FCLD=# SELECT chr(75);
FCLD=# SELECT md5(’1′);
71. Funciones Fechas y Horas
FCLD=# SELECT abstime(‘now’::timestamp); –convierte a abstime
FCLD=# SELECT age(‘now’,’1957-06-13′::timestamp); –preserva meses y años
FCLD=# SELECT to_char(current_timestamp,’HH12:MI:SS’); –convierte datetime a string
FCLD=# SELECT to_char( now(), ‘HH12:MI:SS’);
FCLD=# SELECT current_date;
FCLD=# SELECT current_timestamp;
Clase_Maritima=# SELECT to_date(fecha_llegada, ‘Mon MM YY’) FROM files ;
Clase_Maritima=# SELECT to_char(to_date(fecha_llegada, ‘Mon MM YY’), ‘YYYY-Month-Day’)
FROM files ;
FCLD=# SELECT to_date(’08 Dec 2007 13′, ‘DD Mon YYYY HH’); –convierte string a date
72. Los conectores lógicos en SQL son AND-OR- NOT
Clase_Maritima=# SELECT buque, capitan, bandera, loa FROM buque WHERE capitanlike
‘A%’ AND loa <1000 OR loa=2450;
73. Copiando datos desde un archivo a una tabla
COPY buque FROM ‘/var/lib/pgsql/Buquedatos.txt’;