Ing Marcel Aguilar <amarcel@ula.

ve>

Licencia de Documentación
PostgreSQL por Ing. Richard Garcia Ing. Erika Veliz Ing. Marcel Aguilar Contenidos distribuidos bajo la Licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.5

Licencia de Documentación
Usted es libre de:                                                     copiar, distribuir y comunicar públicamente la obra.                                                                                                                                                      hacer obras derivadas.

Licencia de Documentación
Bajo las siguientes condiciones:                                                                    Reconocimiento Debe reconocer los créditos de la obra de  Reconocimiento la manera especificada por los autores o el licenciador  (pero no de una manera que sugiera que tiene su apoyo o  apoyan el uso que hace de su obra).      No comercial No puede utilizar esta obra para fines  No comercial comerciales.      Compartir bajo la misma licencia  Si altera o transforma  Compartir bajo la misma licencia  esta obra, o genera una obra derivada, sólo puede  distribuir la obra generada bajo una licencia idéntica a  ésta.

Que es PostgresSQL
Es un sistema de gestión de bases de datos objetorelacional, distribuido bajo licencia BSD(Berkeley Software Distribution) y con su código fuente disponible libremente.

Historia El Sistema Gestor de Bases de Datos Objeto-Relacionales conocido como PostgreSQL está derivado del paquete Postgres escrito en Berkeley. El proyecto Postgres de Berkeley Se inicia en la Universidad de Berkeley en 1977 por el Prof. . Michael Stonebraker bajo el nombre Ingres como un ejercicio de aplicación de las teorías de los RDBMS. La implementación del DBMS Postgres comenzó en 1986.

Desarrolladores y organizaciones.Historia ● 1977 . Stonebraker) University of California. Berkeley 1986 .1995: Postgres95 (Portaron al lenguaje SQL2) Andrew Yu and Jolly Chen ● ● ● 1996: PostgreSQL (Portaron al lenguaje SQL3) PostgreSQL Global Development Group. Berkeley 1994 . (POST-inGRES) University of California. . Michael.1994: Postgres. (Prof.1985: Proyecto Ingres.

Historia ● 1997: Primera version formal (6.4. 2000: Red Hat crea la empresa Great Bridge para comercializar PostgresSQL. 2005: EnterpriceDB añadio funcionalidad que le permitian a las aplicaciones escritas trabajar con Oracle.0). 2006: Versión 8. 2008: EBD Crea Postgres Plus. ● ● ● ● ● .1. 2001: Trabaja con Perl/PHP. Sun Solaris incluia Postgres.

• Soporta el uso de índices en cualquier metodo de almacenamiento B-tree. R-tree. • Consultas complejas. integridad referencial. como también los permisos asignados a cada uno de ellos. • Proporciona soporte a SQL92/SQL99/SQL2003/SQL2008. columnas autoincrementables. . posibilidad de definir nuevos tipos . llaves primarias (primary Keys) Claves ajenas (foreign keys).hash.Características • Permite la gestión de diferentes usuarios. • Incluye herencia entre tablas (inheritance). • Incorpora una numerosa estructura de datos. .

Python. Joins. Reglas (Rules). Java. Tcl. • Utiliza un modelo cliente/servidor y usa multiprocesos. Disparadores(triggers). . Perl.Características • Vistas(views). • Proporciona soporte e interfaces para diversos lenguajes incluyendo C/C++.. PHP.NET. QT.ODBC y muchos mas.

Extensiones Postgres • PostGIS: Extensión que añade soporte de objetos geográficos • PgCluster • Administración: PgAdmin PgAccess PhpPgAdmin psql Pg-Top .

programas cliente y – Developers Guide (Información para desarrolladores. tipos de datos.org/docs: – – – – Tutorial (información para nuevos usuarios) User’s Guide (sql. diseño) servidor) – Reference Manual (sintaxis SQL. PL) . funciones.¿Donde obtener información? • En el Sitio oficial www.postgresql. tuning) Administrator’s Guide (Instalación y mantenimiento) Programer’s Guide (extensión de funciones. librerias.

Una sesión de Postgres consiste en los siguientes procesos Unix (programas) cooperando: .Arquitectura en Postgres Postgres utiliza un simple modelo cliente/servidor de "proceso por usuario".

.

conf y pg_ident. Tambien es el encargado de crear los procesos hijos que se encargaran de autentificar estas peticiones.conf • • . Demonio postmaster: Este es el proceso principal de PostgreSQL. Es el encargado de escuchar por un puerto/socket por conexiones entrantes de clientes. Ficheros de configuracion: Los 3 ficheros principales de configuración utilizados por PostgreSQL. gestionar las consultas y mandar los resultados a las aplicaciones clientes. La conexión puede ocurrir via TCP/IP ó sockets locales. postgresql.Arquitectura Arquitectura del sistema basada en Procesos cooperativos: • Aplicación cliente(FrontEnd): Esta es la aplicación cliente que utiliza PostgreSQL como administrador de bases de datos. pg_hba.conf.

Disco: Disco físico donde se almacenan los datos y toda la información necesaria para que PostgreSQL funcione • • • • . Write-Ahead Log (WAL): Componente del sistema encargado de asegurar la integridad de los datos (recuperación de tipo REDO). Kernel disk buffer cache: Caché de disco del sistema operativo. PostgreSQL share buffer cache: Memoria compartida usada por POstgreSQL para almacenar datos en caché.Arquitectura Arquitectura del sistema basada en Procesos cooperativos: • Procesos hijos postgres (BackEnd): Procesos hijos que se encargan de autentificar a los clientes. de gestionar las consultas y mandar los resultados a las aplicaciones clientes.

Convenciones Cualquier orden que observe que comience con el caracter $ son ordenes que se escribiran en el prompt o consola de Linux como usuario. Cualquier orden que comienza con el caracter # son ordenes que se debe escribir en el prompt o consola de Linux como superusuario o root. Cualquier orden que comienza con el caracter #$ son ordenes que se debe escribir superusuario PostgreSQL. El prompt de consola interactiva de postgreSql (se identificaria asi: =#) . el prompt de PostgreSql (se identificará así: postgres@usmaq-laptop:/home$) Cualquier orden que comienza con el caracter $# son ordenes que se debe escribir en la consola interactiva de PostgreSQL.

1: # aptitude install postgresql 8.1 .INSTALACIÓN Logeo como root en debian : $ su Verificamos si exite alguna version de postgresql instalada: # aptitude search postgresql Si no esta instalado instalamos postgresql-8.

INSTALACIÓN Dando como resultado .

  los  instala  en  el  sistema  y  crea  el  cluster  (para  almacenar  la  base  de  datos)  en  /var/lib/postgresql/8.1/main.  que  también  instalará  postgresql­client­8.  ● En otras distribuciones estos directorios pueden estar en otro lugar  del árbol de ficheros.1/main  y  los  ficheros  de  configuración  en  /etc/postgresql/8.1  y  postgresql­ common. ●   Tras  descargar  los  paquetes. La salida que se obtiene es la siguiente: ● .INSTALACIÓN   Es  decir.

  con  lo  que  ya  podemos  intentar  hacerle  alguna  consulta  utilizando.  por  ejemplo: ●   $ psql ­l     nos devuelve  que no existe ningun usuario postgres psql: FATAL:  no existe el rol «user» Luego: # su postgres $ createuser user ¿Será el nuevo rol un superusuario? (s/n) .INSTALACIÓN   Como  puede  verse  también  pone  en  marcha  el  servidor.

d/postgresql­8.  Con  esta  opción  se  pone  a  la  disposición  de  las  aplicaciones y usuarios las bases de datos en postgres.  # /etc/init.1 start ●Detener el servicio.d/postgresql­8.1 restart ● . En este momento cualquier aplicación que se conecte  Detener el servicio.d/postgresql­8.d/ sus acciones fundamentales son: Arrancar  el  servicio.Acciones Fundamentales Postgres es un servicio que se encuentra alojado en el directorio /etc/init.1 stop ●Reiniciar  el  servicio.  Esta  opción  es  una  combinación  de  las  dos  anteriores. a la base de datos dará un error debido a que el servicio esta detenido  # /etc/init. Primero se ejecuta un stop y seguido un start   # /etc/init.

1/main/pg_hba.1/main/pg_hba. 1­)Detener el servidor.Archivos de configuración ●  Primer archivo de configuración pg_hba.conf    Aqui  se  configura    la  lista  de  acceso  a  PostgreSQL  que  metodo  de  autentificación  usar  y  establecer  relaciones  de  confianza  para  ciertos  usuarios.conf & .  acceso  a  bases  de  datos.  maquinas y redes.conf /etc/postgresql/8. 2­)Acceder al archivo con la ayuda del editor de texto gedit: #gedit /etc/postgresql/8.

  se  encuentra  una  lista  de  acceso.0 255.0.0/0                           md5 #tipo       Bd                                   usuario    ip  mascred                    método  host      Administacion_publica     admin  127.255.  dependiendo de su necesidad puede hacer lo siguiente: Cualquier usuario se conecte por medio de una IP en especifico.0.0 md5 #Cualquier usuario de cualquier IP host       all                all        0.0.1.168.conf Al  final  del  archivo  en  la  sección  IPV4.255.  TYPE  DATABASE USER CIDR­ADDRESS               METHOD #Conexion remota host       all                all       192.0.255.255    md5 .4 255.255.Archivos de configuración ● Primer archivo de configuración pg_hba.

Archivo pg_hba.conf .

1 restart .Archivos de configuración Segundo archivo de configuración /etc/postgresql/8.d/postgresql­8.  ● la configuración por defecto no admite conexiones externas. Buscar  la  linea  de  conexiones  y  autentificacion  y  descomentamos  la  linea agregando un * en comillas simple.1/main/postgresql. listen_addresses='*' luego  reiniciamos  el  servicio  o  el  demonio  para  que  los  cambios  surjan  efecto:   # /etc/init.conf  Por  motivos  de  seguridad.

. al usuario postgres del sistema operativo no se le permitirá el acceso desde un shell ni tendrá contraseña asignada.Usuario Postgres En momento que es instalado Postgres se crea un superusuario llamado postgres asi como unas bases de datos que vienen por defecto tales como template0. Pero su ámbito solo llega a las bases de datos de postgres. para después convertirnos en el usuario postgres y realizar tareas en su nombre. El superusuario de Postgres es el que todo lo puede. Normalmente. por lo que deberemos con-ertirnos en el usuario root. template1 y postgres.

Logeo como superusuario Postgres? # su postgres $ su postgres Si tenemos dudas que usuario somos en ese momento solo tecleamos el comando whoami. .

  Cada  uno  de  ellos  requiere  autenticación  como  superusuario. Los métodos son:    •  Un programa de línea de comandos llamado createuser    • A través del uso del comando SQL CREATE USER.Como superusuario Postgres que puedo hacer? PostgreSQL  proporciona  dos  métodos  para  la  creación  de  usuarios  de  bases  de  datos. .

La sintaxis de createuser es:            createuser [ opciones ] [ nombre_usuario ] .Como superusuario Postgres que puedo hacer? El  comando  createuser  es  ejecutado  directamente  desde  la  línea  de  comandos. y puede operar de dos formas.  Createuser forma2: Puede  optar  por  especificar  las  opciones  y  el  nombre  del  usuario  a  ser  creado en la misma línea de comandos. Createuser forma1: Si se utiliza sin argumentos. él interactivamente le pedirá el nombre de usuario y cada uno de los privilegios que se le van a asignar.

 ­createdb                 el usuario podrá crear bases de datos  ­D. ­no­createrole          el usuario no podrá crear otros usuarios    ­d. port puerto   puerto de conexión  ­E.Como superusuario Postgres que puedo hacer? Crear usuarios: createuser nombre_usuario opciones Opciones: ­s. ­unencrypted           almacenar la contraseña sin cifrar  ­i. ­no­createdb           el usuario no podrá crear bases de datos  ­P. ­username=nombre   usuario que se conectara a postgres  ­e.      especifica desde que maquina se conectara   ­host=nombre_maquina   . ­createrole                 el usuario podrá crear otros usuarios  ­R. ­sysid=SYSID            escoger un ID para el nuevo usuario  ­u. ­superuser               el usuario es superusuario ­S. ­pwprompt               asignar una contraseña al nuevo usuario  ­p puerto. ­quiet                        no escribir ningún mensaje  ­h nombre_maquina. ­echo                        mostrar los comandos a medida que se ejecutan  ­q. ­encrypted               almacenar la contraseña cifrada  ­N. ­no­superuser         el usuario no es superusuario   ­r.

preguntas  ) #$  createuser juan ­P (crea usuario con clave) dar permiso createdb #$  createuser  ­A ­D ­P ­h atenea ­p 5000  ramon #$ createuser ­h 192.123.12  ­p 5000 ­S ­D ­R ­e jose .34.Como superusuario Postgres que puedo hacer? #$  createuser  pedro  (crea  un  usuario  sin  contraseña.

Como superusuario Postgres que puedo hacer? Crear usuarios: dropuser opciones nombre_usuario opciones: ­h  ­host           maquina del usuario ­p  ­port            puerto tcp o local en el que el servidor esta a la escucha ­W ­password   clave de conexion ­U ­username   usuario que envoca el borrado del usuario  ­i    ­interactive  confirmacion antes de eliminar ­q                      que no muestre una respuesta al borrar el usuario #$ dropuser pedro  #$ dropuser ­p puerto ­h maquina ­i  usuario_a_borrar #$ dropuser ­h maquina ­U  usuario usuario_a_borrar .

Como superusuario Postgres que puedo hacer? Crear bases de datos: createdb opciones nombre_base_dato #$ createdb prueba En este caso el dueño de esta base de datos es postgres y la codificación  por defecto que predefine postgres es UTF8 #$ createdb prueba2  ­E LATIN1 ­O postgres Se  crea  un  BD  prueba2  con  el  juego  de  simbolo  y  codificacion  LATIN1  donde el rol propietario es postgres #$ createdb bd_juan ­O juan #$ createdb ­p 5000 ­h maria ­E LATIN1 bd_maria Para mas información # man createdb  .

. su dueño y la codificación  de la misma.Como superusuario Postgres que puedo hacer? Listar bases de datos: #$ psql ­l Nos muestra todas las bases de datos existentes.

Como superusuario Postgres que puedo hacer? Borrar bases de datos: dropdb nombre_bd #$ dropdb prueba2 Borrar base de dato como propietario: $ dropdb otra_basededatos  ­h localhost ­U usuario_propietario #$ dropdb otra_basededatos  ­h localhost ­U usuario_propietario mas información: $ man dropdb .

 ­W password. ­V version. . ­d nombre bd. ­p puerto especifico por defecto 5432. También  lamado monitor SQL de postgres Como accedemos tipo root? Primera forma especifico a que bd me conecto psql opciones nombre_bd  #$ psql prueba opciones : ­h host. ­U  usuario.Consola interactiva Postgres Es la interfaz de texto que nos ofrece postgres para gestionar las base de  datos por medios de sentencias SQL(Standar query language). ­? ayuda.

 ­d nombre bd. ­V version. . 2)Su nombre de usuario. ­W password. Como accedemos tipo usuario? Primera forma especifico a que db me conecto psql opciones nombre_bd    $ psql ­h localhost ­U juan ­d bd_juan ­W opciones : ­h host. ­? ayuda. ­U  usuario. 3)Su password y bd a conectar. ­p puerto especifico por defecto 5432.Consola interactiva Postgres Los programas cliente de PostgreSQL espera por lo general que usted especifique los parámetros de conexión cuando quiere acceder a un servidor: 1)Nombre de la maquina donde se ejecuta el servidor PostgreSQL.

la terminal interactiva de PostgreSQL.15. en este caso superusuario = # . Digite: \copyright para ver los términos de distribución \h para ayuda de comandos SQL \? para ayuda de comandos psql \g o or termine con punto y coma para ejecutar una consulta \q para salir prueba=# esta linea nos indica en que base de datos estoy (prueba) y que usuario soy.Uso de la consola interactiva Bienvenido a psql 8.1.

Uso de la consola interactiva visualizar usuarios \du Una vez estando en el prompt de la base de datos podemos visualizar los usuarios de nuestra bd $# \du Lista de roles Nombre de rol | Superusuario | Crear rol | Crear BD | Conexiones | Miembro de ---------------+--------------+-----------+----------+------------+-----------juan | no | no | sí | sin límite | postgres | sí | sí | sí | sin límite | (2 filas) .

Uso de la consola interactiva comandos con \? $# \i ARCHIVO $# \dt $# \du $# \c Base Dato $# \d tabla $# \set $# \l $# \h NOMBRE $# \! COMANDO $# \q ejecuta comandos desde un archivo listar tablas de la base de dato actual listar usuarios del sistema cambiar a otra base de dato describir la tabla variables internas listar todas las bases de datos ayuda sintaxis de comando SQL ejecuta comando de linux salir de la consola interactiva de psql .

.Ver usuarios de PostgreSQL Primera forma: $# \du Segunda forma: $# SELECT usename FROM pg_user.

] | IN GROUP nombre_rol [.Crear usuarios en $# CREATE USER: define un nuevo rol de la base de datos Sintaxis: CREATE USER nombre [ con opción ] donde opción puede ser: SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | CREATEUSER | NOCREATEUSER | LOGIN | NOLOGIN | CONNECTION LIMIT límite_conex | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'contraseña' | VALID UNTIL 'timestamp' | IN ROLE nombre_rol [. .] | USER nombre_rol [.. $#\du ...... .] | ADMIN nombre_rol [. . .] | ROLE nombre_rol [.. ....] | SYSID uid $# CREATE USER pepe CREATEDB PASSWORD '123'.

$# ALTER USER pepe CREATEDB.Modificar usuarios en $# Los usuarios existentes sólo pueden ser modificados por superusuarios PostgreSQL mediante el comando SQL ALTER USER. . donde su sintaxis es: ALTER USER nombre_usuario [ WITH PASSWORD 'password' ] [ CREATEDB | NOCREATEDB ] [ CREATEUSER | NOCREATEUSER ] [ VALID UNTIL 'abstime' ] Aquí nuevamente se hace uso de las palabras claves utilizadas en CREATE USER.

$# \du .Crear grupos de usuarios CREATE GROUP: crea un grupo nuevo CREATE GROUP name [WITH USER usuario] $# \du $# CREATE GROUP desarrolladores WITH USER pepe. $# \du Agregrar o borrar un usuario a un grupo creado ALTER GROUP nombre_grupo { ADD | DROP } USER username $# ALTER GROUP desarrolladores ADD USER joe.

Crear grupos de usuarios .

Borrar grupos de usuarios DROP GROUP: borra el grupo de usuarios $# DROP GROUP desarrolladores. $# \du .

Sintaxis: GRANT { { USAGE| CREATE|SELECT |INSERT|UPDATE |DELETE |RULE | REFERENCES|TRIGGER| ALL [ PRIVILEGES ] [. borrado y creación de reglas. .] } ON [ TABLE ] tablename [.. #$ GRANT SELECT ON mitabla TO "pepe".] TO { username | GROUP groupname } [.. # select * from mitabla. es posible fijar permisos individuales de lectura.... #$ \z #$ insert into mitabla values(10). .Crear privilegios con GRANT Para cada tabla de cada base de datos..] [ WITH GRANT OPTION ] #$ CREATE TABLE mitabla(mientero int). inserción. # psql -h localhost -U pepe prueba # insert into mitabla values(12).. . actualización.

4)Permiso para crear cualquier objeto en la base de datos template1 al usuario luis y maria.Ejercicio 1) Todos los privilegios al usuario marcos en la tabla proveedores 2)Permisos de de consultar.actualizar al usuario manuel sobre tabla precios y poder conceder ambos privilegios a otro usuario. 5)Permiso de consultar a todos los usuario de la tabla films. . 3)Permiso de actualizar al grupo migrupo sobre la tabla personal.

#$ \Z .Revocar privilegios Revoca privilegios de acceso Sintaxis: REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER } [. ....] [ CASCADE | RESTRICT ] #$ REVOKE select on mitabla from pepe.. ..] FROM { username | GROUP groupname } [.] | ALL [ PRIVILEGES ] } ON [ TABLE ] tablename [...

leer w -.DISPARADOR X -.CREAR T -.EXECUTE .INSERT ("append") .TEMPORAL arwdRxt -.USAGE .DELETE .CREATE .RULE .UPDATE ("write") .ESTADO x -.insertar d -.REFERENCES .Permisos de Acceso DB $# \z r -.ELIMINAR R -.REFERENCIAS t -.EXECUTE U -.TEMPORARY .ALL PRIVILEGES – TODOS LOS PERMISOS .TRIGGER .USO C -.SELECT ( "read") .escribir a -.

] $# DROP USER pepe.Borrar usuario DROP USER: remueve el rol de la base de datos Sintaxis: DROP USER nombre [.. .. $# \du dropuser : remueve el rol de base de datos Sintasis: dropuser [opciones] usuario_bd -h host maquina del usuario -p port puerto tcp o local en el que el servidor esta a la escucha -w password clave de conexion -u username usuario que invoca el borrado del usuario -i interactive confirmacion antes de eliminar -q que no muestre una respuesta al borrar el usuario #$ dropuser pepe .

2)Conectarse remotamente con usuario remoto 3)Insertar. 1)Crear un usuario llamado remoto con permiso de select sobre la bd prueba2 tabla a.Practica 1)Crear un usuario 2)Crear una base de datos prueba2. clave 123. donde el dueño sea el usuario de la primera pregunta. 3)Conectarse a esa base de datos con el usuario creado. .consutar en tabla a.

Sign up to vote on this title
UsefulNot useful