Sunteți pe pagina 1din 68

F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . .

O R G O R G
Introduccin a Base de Datos Con Introduccin a Base de Datos Con
Fundacin Cdigo Libre Dominicano Fundacin Cdigo Libre Dominicano
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Prefacio
Me he visto en la obligacion de recopilar informaci on sobre la base de dat os mas import ant e
del mundo del software libre y una de las mas import ant es del mundo en general, ya que no
existe un manual preciso y conciso que de la informaci n certera que mucha gent e anda
buscando.
PostGreSQL es un manej ador y gestor de base de datos objet o- relacional que ha sido
desarrollada de varias maneras desde 1977. Comenzo como un proyect o llamado Ingres en la
Universi dad de Californi a en Berkeley. Ingres en si fue desarrollado de manera comercial por
Relational Technologies / Ingres Corporati on.
En 1986, otro equi po encabezado por el Dr. Michael Stonebraker de la Universi dad de
Berkeley, conti nuo con el desarrollo del codigo base de Ingres para crear un sistema gest or de
base de dat os usando un model o Objet o- Relacional llamado Postgres. En 1996, debi do al nuevo
esfuerzo del software libre y la funcionali dad agregada de dicho sistema, Postgres fue
renombr ado a PostGreSQL, luego de tener por un cort o tiempo el nombre de Postgres95. El
proyect o PostGreSQL esta todava bajo un muy activo desarrollo que cuent a con la partici paci n
de un equi po de desarrolladores y cont ribui dores a traves del mundo.
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Introduccion a postgres
Historia
PostgreSQL ha teni do una larga evolucin, comenzando con el proyect o Ingres en la
Universi dad de Berkeley . Este proyect o, liderado por Michael Stonebraker , fue uno de los
pri meros intent os en implement ar un mot or de base de datos relacional. Despus de haber
trabaj ado un largo tiempo en Ingres y de haber teni do una experiencia comercial con el mismo,
Michael decidi volver a la Universidad para trabaj ar en un nuevo proyect o sobre la experiencia
de Ingres, dicho proyect o fue llamado post - ingres o simplement e POSTGRES.
En proyect o post - ingres pret end a resolver los problemas con el model o de base de dat os
relacional que haban sido aclarados a comienzos de los aos 1980 . El princi pal de est os
probl emas era la incapaci dad del model o relacional de comprender "tipos", es decir,
combi naciones de datos simples que conforman una nica unidad. Actual ment e estos son
llamados objet os . Se esforzar on en introduci r la menor canti dad posible de funcionali dades para
complet ar el soport e de tipos. Estas funcionalidades incluan la habilidad de definir tipos, pero
tambin la habilidad de describir relaciones - las cuales hast a ese moment o eran ampliament e
utilizadas pero mant eni das compl et ament e por el usuari o. En POSTGRES la base de datos
"comprend a" las relaciones y poda obtener informaci n de tablas relacionadas utilizando
reglas .
En ste capt ulo tocaremos algunos punt os suelt os particulares a PostgreSQL. En las
inst al aciones basadas en RedHat estndar es, PostgreSQL almacena los dat os en el direct ori o
/var/lib/pgsql/base/ y a partir de ah un direct ori o para cada base.
Cada tabla es un archivo, as como los indices. Los nombres de las tablas pert enecient es al
sistema llevan el prefijo pg_. El archivo PG_VERSION (present e en cada base) contiene la versin
mayor con la que fu creada la base. Al cambiar de versin de PostgreSQL es import ant e verificar
que no haya sido cambi ado el format o de alguna de estas tablas, en cuyo caso ser necesari o
respal darl as antes de inst alar la nueva versin y luego volver a cargarlas.
Caracteristicas de PostGreSQL
Es un Gestor de datos Objeto- Relacional
Postgresql organi za los dat os con un modelo obejt o- relacional, es capaz de manej ar
procedi mi ent os, ruti nas complejas, y reglas. Ejempl os de su funcionali dad avanzada
son consul t as declarativas SQL, cont rol de versiones multi pl es concurrent es, soport e
multi - usuari o, transacciones de dos fases, opti mi zaci on de consul t as, herencia de
datos, arreglos y mat rices multi di mensi onal es.
Altamente Extensible
Postgresql soport a operadores, funciones, met odos de acceso y tipos de datos
declarados por el usuari o. Soport a tambin sobrecarga de operadores, sobrecarga de
procedi mi ent os, vistas materi ali zabl es, y particionami ent o de tablas y datos.
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Soporte comprensivo de SQL
Postgresql soport a la especificacin base SQL99, SQL:2003 y tambin incluye
caract er sticas avanzadas como las uniones SQL92.
Integridad Referencial
Postgresql soport a integri dad referencial, la cual es usada para asegurar la validez de
la informacin dent ro de la base de dat os.
API sumamente flexible
La flexibilidad del API de PostGreSQL ha permi ti do a enti dades que provean soport e
de facil desarroll o para la base de dat os de PostGreSQL. Estas interfaces incluyen
Object Pascal, Python, Perl, PHP, ODBC, Java/JDBC, Ruby, TCL, C/C++, Pike y un largo
etcetera.
Lenguajes Procedimentales
PostGreSQL tiene soport e para lenguaj es internos procedi ment al es, incluyendo un
lenguaj e nativo llamado PL/pgSQL. Este lenguaj e es comparabl e con el lenguaje
procedi ment al de Oracle, PL/SQL. Otra ventaj a de PostGreSQL es la capacidad de usar
PERL, Pitn, TCL, Ruby, R, PHP, Shell Scripti ng, etc.; como lenguaj es procedi ment al es
internos e integrados.
MVCC
MVCC, o cont rol de versiones multi ples concurrent es, es la tecnologa que PostGreSQL
usa para evitar los seguros (locking) innecesari os. Si usted ha usado cualquier otro
gest or de base de dat os SQL, como MySQL, MS SQL Server, Sybase ASE, etc.; se ha
podi do dar cuent a que existen veces cuando la lectura de un client e tiene que esperar
para accesar a la informacin en la base de datos. La espera es causada por los
client es que estn escribiendo regist ros e informaci n en la base de datos. En pocas
palabras, los clientes que leen son bloqueados por los otros clientes que escriben o
actuali zan regist ros en la base de datos.
Usando MVCC, PostGreSQL evita este problema de manera definitiva. MVCC es
consi derado mucho mej or que los seguros a nivel de regist ros (row level - locking),
debi do a que el lector nunca es bloqueado por el escrit or. En vez de eso, PostGreSQL
mantiene un regist ro de todas las transacciones ejecut adas por los usuarios de la base
de dat os. PostGreSQL es entonces capaz de manej ar regist ros sin hacer esperar a la
gente a que los regist ros esten disponi bl es.
Cliente / Servidor
PostGresSQL usa una arqui t ect ura client e / servidor basada en un proceso por
usuari o. Esto es similar al proceso que utiliza el servidor web Apache para el manej o
de procesos. Existe un proceso maest ro que se desprende para proveer conexiones
adicionales por cada client e que se intent a conect ar a PostGreSQL.
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Write Ahead Logging (WAL)
La caract eri stica de PostGreSQL conoci da como Write Ahead Logging increment a la
confiabilidad de la base de datos regist rando los cambios antes de ser escrit os a la
base de dat os. Esto asegura que, en caso de ocurri r un fallo critico en la base de datos,
existira un regist ro de transacci ones del cual se pueda restaur ar. Esto puede ser de
gran beneficio en caso de cualquier fallo, como cualquier cambio que no haya sido
total ment e escrito a la base de dat os pueden ser recuperados usando los dat os que
fueron regist rados ant erior ment e. Una vez el sistema es restaurado, el usuari o puede
conti nuar con su trabaj o just o a partir del moment o antes ocurrir el fallo.
Principios de Diseo de Base de Datos
Qu es una Base de Datos
En rigor, una Base de Datos es el conj unt o de dat os almacenados con una
est ruct ura lgica. Es decir, tan import ant e como los dat os, es la estruct ura concept ual
con la que se relacionan entre ellos. En la prctica, podemos pensar esto como el
conjunt o de dat os ms los programas (o software) que hacen de ellos un conj unt o
consi st ent e.
Si no tenemos los dos factores unidos, no podemos hablar de una base de datos, ya
que ambos combi nados dan la coherenci a necesari a para poder trabaj ar con los datos
de una manera sistemt ica.
Definiciones
Las siguient es son las definiciones que necesit amos manej ar con claridad para
comprender el rest o de los concept os en las bases de dat os relacionales. Algunas son
definiciones dadas a la ligera, que sern extendi das y formali zadas en las secciones
correspondi ent es.
Tupla:
Es una hilera o fila en una tabla.
Atributo:
Es una columna en una tabla.
Dominio:
Es el conj unt o de valores de los cuales los atribut os obtienen sus valores.
Llave:
Es un atribut o con una caracter stica de relevancia para identificar la tupla.
Llave primaria:
Es una llave con valores nicos, es decir, no ocurren ms de una vez en el atribut o.
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Cardinalidad:
Es el nmero de tupl as en una tabla.
Grado:
Es el nmero de atribut os en una tabla.
Relacin:
Una definicin simpl e es que se corresponde con una tabla y en ocasiones es
preferible pensarl o de esta manera. La definicin cannica es que una relacin es el
product o cartesi ano de dos o varios domi ni os.
Podemos tambin decir que un domi ni o es un conjunt o de valores escalares del
mismo tipo, dnde un valor escalar es la mni ma unidad semnti ca de informaci n en
el senti do de que son valores atmicos.
Tabla base:
Es una relacin autnoma a diferencia de las vistas y las tablas intermedi as
const r ui das a parti r de una consul t a.
Vista:
Es una relacin virtual, que se const r uye a partir de tablas base o incluso otras vistas,
formada por atribut os de estas otras tablas de forma directa o como resul t ado de una
consul t a.
Estructura lgica vs. estructura fsica.
Es claro que la forma fsica como estn almacenados los datos es independi ent e del
concept o que tengamos de ellos. Son el conj unt o de programas que saben como traer,
unir y most rar los datos, as como aquellos encargados de almacenarl os, los que le
dan coherenci a al concept o Base de Datos.
Digamos que es como la diferencia entre hari na, levadura, sal y agua por separado
y una pieza de pan. Quin le d coherenci a a esa pieza de pan es el proceso que se
sigue para elaborarl o.
Es import ant e concept uali zar esto, porque del diseo de la estruct ur a lgica
depende toda la funcionali dad del sistema. Almacenar dat os en una base de dat os
aprovechando solament e la estruct ur a fsica no ofrece, relativament e, ninguna
ventaj a. En cambio un buen diseo de acuerdo a la nat ural eza de los dat os y a la
forma como sern explot ados hace toda la diferencia.
Un gran problema es la inconsi st encia de datos. Digamos que empleamos un
archivo secuencial para almacenar la informaci n de client es. Supongamos que
tenemos varios programas que utilizan esa informaci n y que en un moment o dado
se pueden tener regist ros duplicados con atribut os diferent es. Por ejempl o, una
persona cambia de direccin y al no tener una estruct ura bien defini da, no alteramos
el regist ro, sino que lo damos de alta de nuevo con la nueva direccin. De esta
manera, tendremos a la misma persona con dos datos diferent es y sin posibilidad de
garanti zar que todos los programas tendrn en cuent a que la direccin vlida es la del
segundo regist ro que aparece.
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Puede ocurri r tambin que dos personas estn modificando simult neament e
atribut os disti nt os del mismo regist ro. Sin un sistema de manej o de concurrenci a, no
podemos garanti zar que ambos cambios permanezcan.
Bajo la misma suposicin de uno o ms archivos con la informacin y varios
programas independi ent es que la explot an, es fcil ver que cualqui er nueva
explot acin de la informacin implica un nuevo programa y que mant ener un sistema
como este conlleva toda la complejidad de mant ener varios programas cuando se
aade o elimina una columna a los regist ros.
Otro ejempl o, si tenemos un regist ro de personas donde almacenamos datos como:
nombre, RFC, puest o, salario base, direccin, telfono, fecha de naci mient o, gust os
musicales, aficiones, nombre, fecha de naci mient o y ocupacin del cnyugue,
nombres y fechas de naci mient o de sus hijos, nombres de sus mascot as, autos que
posee (con todas las caract er sticas), etc; y frecuent ement e slo utilizaremos nombre,
RFC, puest o y salario base para generar una nmi na, esto implica que en cada corri da,
recuperaremos informaci n que no necesit amos, con el agravant e de que tenemos que
traer regist ros inmensos para utilizar slo cuat ro campos. El problema no es el
almacenaj e en disco, sino el tiempo desper di ciado en recuperar regist ros de tal
magni t ud.
Un diseo un poco ms inteligent e tendr a dos tablas, una con los datos ms
frecuent ement e empleados de cada persona y la otra con el rest o de la informacin
que se emplea quiz slo para fines estad sti cos o para enviar tarjet as de felicitacin.
Por supuest o, ambas tablas estarn relacionadas por una llave pri mari a comn.
Si tenemos un sistema donde por un lado hacemos un abono y por otro un cargo
en una operacin que est relacionada, es de esperar que no ocurra el cargo si no
puede ocurrir el abono, o viceversa. Es decir, debemos de tener transacciones
atmicas. En este caso, la pareja de transacci ones debe de ocurrir por complet o o no
debe de ocurri r en lo absol ut o.
Finalment e, un terri ble problema es la exposicin de los dat os. En muchos casos
nos interesa que ciertas gentes tengan acceso slo a part e de la informacin. Es de
mal gust o que todos los empleados sepan cul es el salario del direct or.
Qu es un Manejador de Bases de Datos.
De la lectura previa podemos deducir que el Manejador de Bases de Datos (DBM
por sus siglas en ingls) facilita las funciones de:
almacenar fsicament e,
garanti zar consist enci a,
garanti zar integri dad,
atomici dad transaccional,
y manej ar vistas a la informaci n.
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Sistemas de archivos:
Algunos MBD implement an sus propi os sistemas de archivos, manej ando
direct ament e particiones o discos compl et os. Esto se ha hecho principal ment e para
facilitar la port abilidad y hacer ms eficient e esta part e. Sin embargo, PostgreSQL
utiliza el sistema de archivos del sistema operat ivo husped y en el caso de los
derivados de Unix, esto ha most rado ser eficient e a la vez que manti ene la
port abilidad.
ndices:
El empleo adecuado de ndices en una relacin acelera el acceso a la informacin,
pero consume espacio consi derabl e, es por esto que vale la pena hacer un anlisis
cuidadoso de cules atribut os requieren ser indexados.
Niveles:
Interno: cmo se almacenan y recuperan los dat os (nico)
Externo: cmo perciben los dat os los usuari os (muchos)
Conceptual: enlace entre los anteriores
Estructuras de datos
Las estruct uras de dat os que se manej an en el modelo relacional corresponden a
los concept os de relacin, enti dad, atribut o y domi ni o, los cuales de introducen aqu
intencional ment e:
Relacin: Por una relacin se entiende una coleccin o grupo de objet os que
tienen en comn un conjunt o de caracter sticas o atribut os.
Entidad: Es una unidad de dat os en una relacin con un conj unt o finito de
atribut os. Es tambin conoci do como n- ada, a raz de que consist e de n-
valores, uno por cada atribut o.
Atributo: Tambin llamado caract er st ica, cada atribut o de una relacin tiene
asociado un domi nio en el cual toma sus valores.
Domini o: Es un conj unt o de valores que puede tomar un atribut o en una
relacin.
Reglas de integridad
Los concept os bsicos de integridad en el model o relacional son el de llave pri mari a, llave
fornea, valores nulos y un par de reglas de integri dad.
Una llave primari a es uno o un conjunt o de atribut os que permi t en identificar a las n- adas de
manera nica en cualquier moment o.
Una llave fornea de una relacin es un atribut o que hace referencia a una llave pri maria de
otra relacin; esto da pie a que una relacin pueda tener varias llaves forneas.
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Un valor nulo es un valor que est fuera de la definicin de cualquier domi ni o el cual permi t e
dejar el valor del atribut o ` ` l at ent e' ' , su uso es frecuent e en las siguient es situaciones:
i) Cuando se crea una n- ada y no se conocen todos los valores de cada uno de los
atribut os.
ii) Cuando se agrega un atribut o a una relacin ya existent e.
iii) Para no tomarse en cuent a al hacer clculos numricos.
Las dos reglas de integri dad tienen que ver precisament e con los concept os antes
mencionados y son:
Integridad de Relaciones: Ningn atribut o que forme part e de una llave primari a
puede acept ar valores nulos.
Integridad Referencial: Implica que en todo moment o dichos dat os sean correct os, sin
repeticiones innecesari as, dat os perdi dos y relaciones mal resuel t as.
Restricciones
Las restricciones de los datos se imponen para asegurarnos que los datos
cumplen con una serie de condiciones predefinidas para cada tabla. Estas
restricciones ayudan a conseguir la integridad de referencia: todas las
referencias dentro de una BD son vlidas y todas las restricciones se han
cumplido.
Las restricciones se van a definir acompaadas por un nombre, lo que permitir
activarlas o desactivarlas segn sea el caso; o tambin mezcladas en la
definiciones de las columnas de la tabla. A continuacin vamos a describir cada
una de las restricciones mencionadas.
NOT NULL
Establece la obligatoriedad de que esta columna tenga un valor no nulo. Se
debe especificar junto a la columna a la que afecta. Los valores nulos no
ocupan espacio, y son distint os a 0 y al espacio en blanco. Hay que tener
cuidado con los valores nulos en las operaciones, ya que 1 * NULL es
igual a NULL.
UNIQUE
Evita valores repetidos en una columna, admitiendo valores nulos. Oracle
crea un ndice automticament e cuando se habilita esta restriccin y lo
borra al deshabilitarse.
DEFAULT
Establece un valor por defecto para esa columna, si no se le asigna
ninguno.
CHECK
Comprueba que se cumpla una condicin determi nada al rellenar esa
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
columna. Esta condicin slo debe estar const rui da con columnas de esta
misma tabla.
PRIMARY KEY
Establece el conjunt o de columnas que forman la clave primaria de esa
tabla. Se comport a como nica y obligatoria sin necesidad de explicitarlo.
Slo puede existir una clave primaria por tabla. Puede ser referenciada
como clave ajena por otras tablas. Crea un ndice automticament e
cuando se habilita o se crea esta restriccin. En Oracle, los ndices son
construi dos sobre rboles B
+
.
FOREIGN KEY
Establece que el conteni do de esta columna ser uno de los valores
conteni dos en una columna de otra tabla maest ra. Esta columna marcada
como clave ajena puede ser NULL. No hay lmite en el nmero de claves
ajenas. La clave ajena puede ser otra columna de la misma tabla. Se puede
forzar que cuando una fila de la tabla maest ra sea borrada, todas las filas
de la tabla detalle cuya clave ajena coincida con la clave borrada se borren
tambin. Esto se consigue aadiendo la coletilla ON DELETE CASCADE en
la definicin de la clave ajena.
Comandos DDL
El lenguaj e SQL incluye un conj unt o de comandos para definicin de estruct ur a de datos.
Create Table
El comando fundament al para definir dat os es el que crea una nueva relacin (una
nueva tabla). La sintaxis del comando CREATE TABLE es:
CREATE TABLE table_name (
name_of_attr_1 type_of_attr_1
[, name_of_attr_2 type_of_attr_2 [, ...]]
);
Ejemplo de Creacin de una tabla:
Para crear las tablas definidas en La Base de Datos de Proveedores y Artculos se
utilizaron las siguient es inst rucciones de SQL:
create table departamentos
(
codigo char(3) not null,
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
nombre varchar(40) not null,
primary key(codigo)
);
create table areas
(
codigo char(3) not null,
nombre varchar(55) not null,
departamento char(3) not null,
primary key(codigo),
foreign key(departamento) references departamentos
);
create table showconstraints (
id integer PRIMARY KEY,
unq integer CONSTRAINT sc_unq UNIQUE,
checkme integer CONSTRAINT posval CHECK ( checkme > 0 )
);
Agregando un Constraint Primary key
maritima=# ALTER TABLE alex ADD CONSTRAINT a_pk primary key (Ides);
maritima=# ALTER TABLE alex ADD constraint a_fk foreign key (ides)
references profesores (codigo);
Agregando un Constraint Check
mariti ma=# ALTER TABLE alex_c ADD const rai nt alex check (ides < 20);
Tablas temporales en PostgreSQL
Podemos utilizar tablas temporales en memoria para no tener que utilizar el acceso del disco
duro del servidor.
mariti ma=# CREATE TEMP table temalex as select * from alex ;
Tipos de Datos en SQL
A conti nuacin sigue una lista de algunos tipos de datos soport ados por SQL:
INTEGER: entero binari o con signo de palabra compl et a (31 bits de precisin).
SMALLINT: entero binario con signo de media palabra (15 bits de precisin).
DECIMAL (p[,q]): nmero deci mal con signo de p dgitos de precisin,
asumiendo q a la derecha para el punt o deci mal. (15 _ p _ qq _ 0). Si q se omite,
se asume que vale 0.
FLOAT: numrico con signo de doble palabra y coma flotant e.
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
CHAR(n): cadena de caract eres de longit ud fija, de longit ud n.
VARCHAR(n): cadena de caract eres de longit ud variable, de longit ud mxima n.
Tipos de datos Bsicos en PostgreSQL
o Lgicos: BOOLEAN
o Carct er y cadenas: CHAR(.), VARCHAR(.), TEXT)
o Numricos exactos: NUMERIC(.,.), INTEGER, INT2, INT4, INTB; OID, SMALLINT
o Numricos aproxi mados: FLOAT, FLOAT4
o Tiempo: DATE, TIME, TIMESTAMP
o Intervalo: INTERVAL
o Geomt rico. POINT, LSEG, PATH, BOX, CIRCLE, POLYGON
o Redes: INET, CIDR, MACADDR
Create Index
Se utilizan los ndices para acelerar el acceso a una relacin. Si una relacin R tiene
un ndice en el atribut o A podremos recuperar todas la tuplas t que tienen t(A) = a en
un tiempo aproxi madament e proporci onal al nmero de tales tuplas t ms que en un
tiempo proporci onal al tamao de R.
Para crear un ndice en SQL se utiliza el comando CREATE INDEX. La sint axis es:
CREATE INDEX index_name
ON table_name ( name_of_attribute );
Ejemplo de la creacin de un indice:
Para crear un ndice llamado I sobre el atribut o SNAME de la relacin SUPPLIER,
utilizaremos la siguient e inst ruccin:
maritima=# CREATE INDEX i_dep ON departamentos (codigo);
El ndice creado se mantiene automt i cament e. es decir, cada vez que una nueva
tupla se insert e en la relacin SUPPLIER, se adapt ar el ndice I. Ntese que el nico
cambi o que un usuari o puede percibir cuando se crea un ndice es un increment o en
la velocidad.
Operadores
Describe los operadores propios disponibles en Postgres .
Postgres proporciona un gran nmero de tipos de operadores. Estos operadores estn
declarados en el catlogo del sistema pg_operator. Cada entrada en pg_operator incluye
el nombre del procedi mient o que implement a el operador y las clases OIDs de los
tipos de entrada y salida.
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Operador Descripcin Utilizacin
< Menor que? 1 < 2
<= Menor o igual que? 1 <= 2
>= Mayor o igual que? 2 >= 1
<> No igual? 1 <> 2
= Igual? 1 = 1
| | Concatena strings 'Postgre' | | 'SQL'
* Multiplicacin 2 * 3
FCLD=# SELECT 8+3 as Suma;
FCLD=# SELECT 8- 3 as Suma;
FCLD=# SELECT 8/3 as Suma;
FCLD=# SELECT 8*3 as Suma;
FCLD=# SELECT 8^3 as Suma;
Funciones Matematicas
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);
FCLD=# SELECT round(99.2, 3);
FCLD=# SELECT pi();
FCLD=# SELECT trunc(99.1);
Funciones Cadenas
FCLD=# SELECT 'Jose' | | ' Paredes' ;
FCLD=# SELECT bit_lengt h(' k') ;
FCLD=# SELECT char_lengt h(' 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');
Funciones Fechas y Horas
Las funciones de Fecha/ Hora provee un poderoso conjunt o de herramient as para
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
manipular varios tipos Date/Ti me.
FCLD=# SELECT abstime(' now'::timest amp); - - convierte a abstime
FCLD=# SELECT age('now',' 1957- 06- 13'::timest amp); - - preserva meses y aos
FCLD=# SELECT to_char(current_ti mest amp, ' HH12:MI:SS'); - - convierte dateti me a string
FCLD=# SELECT to_char( now(), 'HH12:MI:SS');
FCLD=# SELECT current_date;
FCLD=# SELECT current_ti mest amp;
Funciones de Formato
FCLD=# SELECT to_char(1295, '9,999'); - - convierte int4/ i nt 8 a string
FCLD=# SELECT to_char(125. 8, '999D9'); - - convierte float4/ fl oat 8 a string
FCLD=# SELECT to_char( - 125.8, '999D99S'); - - convierte numeric a string
FCLD=# SELECT to_date(' 08 Dec 2007 13', 'DD Mon YYYY HH'); - - convierte string a date
SELECT to_number(' 12,454. 8- ', '99G999D9S'); - - convierte string a numeric
FCLD=# select to_char(current_ti mest amp,' Day, DD HH12:MI:SS');
Create View
Se puede ver una vista como una tabla virtual, es decir, una tabla que no existe
fsicament e en la base de datos, pero aparece al usuari o como si existiese. Por cont ra,
cuando hablamos de una tabla base, hay real ment e un equivalent e almacenado para
cada fila en la tabla en algn sitio del almacenami ent o fsico.
Las vistas no tienen datos almacenados propi os, distingui bles y fsicament e
almacenados. En su lugar, el sistema almacena la definicin de la vista (es decir, las
reglas para acceder a las tablas base fsicament e almacenadas para mat eriali zar la
vista) en algn lugar de los catlogos del sist ema.
En SQL se utiliza el comando CREATE VIEW para definir una vista. La sintaxis es:
CREATE VIEW view_name
AS select_stmt
donde select_stmt es una inst ruccin select vlida, como se defini en Select.
Ntese que select_stmt no se ejecut a cuando se crea la vista. Simplement e se
almacena en los catlogos del sistema y se ejecut a cada vez que se realiza una
consul t a cont ra la vista.
Sea la siguient e definicin de una vista (utilizamos de nuevo las tablas de La Base
de Datos de Proveedores y Artculos ):
create view despro as
select p.nombre_pila, a.nombre as Nom_Area, asg.nombre as Asignatura,
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
d.nombre as Nom_Departamento, lo.Nombre as Aula, lo.Situacion as
Lugas, lo.edificio
from profesores p, areas a, departamentos d, asignaturas asg,
docencia doc, locales lo
where p.area=a.codigo
and d.codigo=a.departamento
and asg.siglas=doc.siglas
and p.codigo=doc.profesor
and lo.codigo=doc.local
group by p.nombre_pila, a.nombre, asg.nombre, d.nombre, lo.Nombre,
lo.Situacion, lo.edificio
Ahora podemos utilizar esta relacin virtual London_Suppliers como si se trat ase
de otra tabla base:
SELECT * FROM despro
Where nombre_Pila=Luis;
Lo cual nos devolver la siguient e tabla:
SNAME | PNAME
------+-------
Smith | Tornillos
Para calcular este resul t ado, el sistema de base de dat os ha realizado previament e
un acceso oculto a las tablas de la base SUPPLIER, SELLS y PART. Hace esto ejecut ando
la consul t a dada en la definicin de la vista cont ra aquellas tablas base. Tras eso, las
cualificaciones adicionales (dadas en la consul t a cont ra la vista) se podrn aplicar
para obtener la tabla resul t ant e.
Drop Table, Drop Index, Drop View
Se utiliza el comando DROP TABLE para eliminar una tabla (incluyendo todas las
tuplas almacenadas en ella):
DROP TABLE table_name;
Para eliminar la tabla SUPPLIER, utilizaremos la instruccin:
DROP TABLE departamentos;
Se utiliza el comando DROP INDEX para elimi nar un ndice:
DROP INDEX index_name;
Finalment e, eliminaremos una vista dada utilizando el comando DROP VIEW:
DROP VIEW view_name;
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Comandos DML
El lenguaj e SQL incluye un conj unt o de comandos para la mani pul acin y consul t a de dat os.
Select
El comando ms usado en SQL es la instruccin SELECT, que se utiliza para
recuperar dat os. La sint axis es:
SELECT [ALL|DISTINCT]
{ * | expr_1 [AS c_alias_1] [, ...]}
FROM table_name_1 [t_alias_1]
[, ... [, table_name_n [t_alias_n]]]
[WHERE condition]
[GROUP BY name_of_attr_i
[,... [, name_of_attr_j]] [HAVING condition]]
[{UNION [ALL] | INTERSECT | EXCEPT}
SELECT ...]
[ORDER BY name_of_attr_i [ASC|DESC]
[, ... [, name_of_attr_j [ASC|DESC]]]];
Ilust raremos ahora la compleja sint axis de la inst ruccin SELECT con varios
ejempl os. Las tablas utilizadas para los ejempl os se definen en: La Base de Datos de
Ejemplos.
Consultas sencillas
Aqu tenemos algunos ejempl os sencillos utilizando la inst ruccin SELECT:
Query sencilla con cualificacin
Para recuperar todas las tuplas de la tabla PART donde el atribut o PRICE es mayor
que 10, formul aremos la siguient e consul t a:
SELECT * FROM PART
WHERE PRICE > 10;
y obtenemos la siguient e tabla:
PNO | PNAME | PRICE
----+---------+-----
3 | Cerrojos| 15
4 | Levas | 25
Utilizando "*" en la inst rucci n SELECT solicitaremos todos los atribut os de la
tabla. Si queremos recuperar slo los atribut os PNAME y PRICE de la tabla PART
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
utilizaremos la inst rucci n:
SELECT PNAME, PRICE
FROM PART
WHERE PRICE > 10;
En este caso el resul t ado es:
PNAME | PRICE
--------+-----
Cerrojos| 15
Levas | 25
Ntese que la SELECT SQL corresponde a la "proyeccin" en lgebra relaciona, no a
la "seleccin".
Las cualificaciones en la clausul a WHERE pueden tambin conect arse lgicament e
utilizando las palabras claves OR, AND, y NOT:
SELECT PNAME, PRICE
FROM PART
WHERE PNAME = Cerrojos AND
(PRICE = 0 OR PRICE < 15);
dar como resul t ado:
PNAME | PRICE
--------+-----
Cerrojos| 15
Las operaciones arit mt icas se pueden utilizar en la lista de objetivos y en la
clausula WHERE. Por ejempl o, si queremos conocer cuant o cuest an si tomamos dos
piezas de un artculo, podramos utilizar la siguient e consul t a:
SELECT PNAME, PRICE * 2 AS DOUBLE
FROM PART
WHERE PRICE * 2 < 50;
y obtenemos:
PNAME | DOUBLE
----------+------
Tornillos | 20
Tuercas | 16
Cerrojos | 30
Ntese que la palabra DOBLE tras la palabra clave AS es el nuevo ttul o de la
segunda columna. Esta tcnica puede utilizarse para cada element o de la lista objetivo
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
para asignar un nuevo tt ulo a la columna result ant e. Este nuevo ttulo recibe el
calificativo de "un alias". El alias no puede utilizarse en todo el rest o de la consul t a.
CLAUSULA DISTINCT
Una opcin interesant e es la de efect uar selecci ones sin coincidencia . Para ello
escribi mos la palabra clave DISTINCT despus de SELECT.
Si por ejempl o buscsemos el saber en qu poblaciones hay alumnos (tabla alumnos) sin
necesidad de que se repita varias veces la misma poblacin usaramos una sentencia de
esta clase: Select Distinct campos From tablas
mariti ma=# SELECT disti nct codigo from buque ;
SELECT INTO
Crear una nueva tabla a parti r de una tabla o vista ya existent e.
mariti ma=# SELECT * into Amari from buque ;
Para insertar Registros de otra Tabla:
maritima=# insert into amari select * from buque;
COPY
Copia datos entre ficheros y tablas
maritima=# COPY alex FROM '/ var/ l i b/ pgsql / al ex.txt' ;
Nota: Los campos dentros del archivo alex.txt estan separados por un Tabulado.
En este Ejempl o estamos copi ando la informaci on de la tabla profesores a un archi vo dentro
del SO.
mari ti ma=# COPY profesores TO '/ var / l i b/ pgs ql / j ose. txt';
Joins (Cruces)
El siguient e ejempl o muest ra como las joins (cruces) se realizan en SQL.
Para cruzar tres tablas SUPPLIER, PART y SELLS a travs de sus atribut os comunes,
formul aremos la siguient e instruccin:
SELECT S.SNAME, P.PNAME
FROM SUPPLIER S, PART P, SELLS SE
WHERE S.SNO = SE.SNO AND
P.PNO = SE.PNO;
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
y obtendr emos la siguient e tabla como resul t ado:
SNAME | PNAME
-----+-----
Smith | Tornillos
Smith | Tuercas
Jones | Levas
Adams | Tornillos
Adams | Cerrojos
Blake | Tuercas
Blake | Cerrojos
Blake | Levas
En la clausul a FROM hemos introduci do un alias al nombre para cada relacin
porque hay atribut os con nombre comn (SNO y PNO) en las relaciones. Ahora
podemos disti ngui r ent re los atribut os con nombre comn simplificando la adiccin
de un prefijo al nombre del atribut o con el nombre del alias segui do de un punt o. La
join se calcula de la misma forma, tal como se muest r a en Una Inner Join (Una Join
Interna) . Primero el product o cartesiano: SUPPLIER X PART X SELLS Ahora
seleccionamos nicament e aquellas tupl as que satisfagan las condiciones dadas en la
clausula WHERE es decir, los atribut os con nombre comn deben ser iguales).
Finalment e eliminamos las columnas repeti das (S.SNAME, P.PNAME).
Operadores Agregados
SQL proporci ona operadores agregados (como son AVG, COUNT, SUM, MIN, MAX)
que toman el nombre de un atribut o como argument o. El valor del operador agregado
se calcula sobre todos los valores de la columna especificada en la tabla compl et a. Si
se especifican grupos en la consul t a, el clculo se hace slo sobre los valores de cada
grupo.
Ejemplo de Operadores Agregados
Si queremos conocer el cost e promedi o de todos los artculos de la tabla PART,
utilizaremos la siguient e consul t a:
SELECT AVG(PRICE) AS AVG_PRICE
FROM PART;
El resul t ado es:
AVG_PRICE
-------
14.5
Si queremos conocer cuant os artculos se recogen en la tabla PART, utilizaremos la
inst ruccin:
SELECT COUNT(PNO)
FROM PART;
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
y obtendr emos:
COUNT
-----
4
Agregacin por Grupos
SQL nos permi t e particionar las tuplas de una tabla en grupos. En est as
condiciones, los operadores agregados descrit os antes pueden aplicarse a los grupos
(es decir, el valor del operador agregado no se calculan sobre todos los valores de la
columna especificada, sino sobre todos los valores de un grupo. El operador agregado
se calcula individual ment e para cada grupo).
El particionami ent o de las tupl as en grupos se hace utilizando las palabras clave
GROUP BY segui das de una lista de atribut os que definen los grupos. Si tenemos
GROUP BY A1, ..., Ak habremos particionado la relacin en grupos, de tal modo que
dos tuplas son del mismo grupo si y slo si tienen el mismo valor en sus atribut os A1,
..., Ak.
Uso de funciones de conjunto
Como otros lenguajes de consul t a, PostgreSQL soport a funciones de conj unt o. Una
funcin de conj unt o calcula un nico resul t ado a parti r de ml ti ples filas de entrada.
Por ejempl o, existen funciones globales para calcular count (cont ar), sum (sumar),
avg (media), max (mximo) y min (mni mo) sobre un conj unt o de instancias.
Es import ant e comprender la relacin ent re las funciones de conjunt o y las
clusulas SQL where y having . . La diferencia fundament al ent re where y having es
que: where selecciona las columnas de entrada antes de los grupos y entonces se
comput an las funciones de conjunt o (de este modo cont rol a qu filas van a la funcin
de conj unt o), mient ras que having selecciona grupos de filas despus de los grupos y
entonces se comput an las funciones de conjunt o. De este modo la clusul a where
puede no contener funciones de conj unt o puest o que no tiene senti do intent ar usar
una funcin de conj unt o para deter mi nar qu fila ser la entrada de la funcin. Por
otra part e, las clusul as having siempre contienen funciones de conjunt o.
(Estrict ament e hablando, usted puede escribir una clusul a having que no use
funciones de grupo, pero no merece la pena. La misma condicin podra ser usada de
un modo ms eficaz con where ).
Como ejempl o podemos buscar la mni ma temperat ur a en cualqui er part e con
SELECT max(temp_lo) FROM weather;
Si queremos saber qu ciudad o ciudades donde se dieron estas temperat ur as,
podemos probar
SELECT city FROM weather WHERE temp_lo = max(temp_lo);
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
pero no funcionar debi do a que la funcin max() no puede ser usada en where . Sin
embargo, podemos replant ar la consul t a para llevar a cabo lo que buscamos. En este
caso usando una subseleccion :
SELECT city
FROM weather
WHERE temp_lo = (SELECT max(temp_lo) FROM weather);
Lo que ya es correct o, ya que la subsel eccin es una operaci n independi ent e que
calcula su propi a funcin de grupo sin import ar lo que pase en el select exterior. Las
funciones de grupo son tambin muy tiles combi nndol as con clusul as group by.
Por ejempl o, podemos obtener la temper at ur a mni ma tomada en cada ciudad con:
SELECT city, max(temp_lo)
FROM weather
GROUP BY city;
que nos devuelve una fila por ciudad. Podemos filtrar estas filas agrupadas usando
having :
SELECT city, max(temp_lo)
FROM weather
GROUP BY city
HAVING min(temp_lo) < 0;
que nos da los mismos result ados, pero de ciudades con temperat ur as bajo cero.
Finalment e, si slo nos interesan las ciudades cuyos nombres empi ecen por P,
deberamos hacer :
SELECT city, max(temp_lo)
FROM weather
WHERE city like P%
GROUP BY city
HAVING min(temp_lo) < 0;
Tenga en cuent a que podemos aplicar la rest riccin del nombre de ciudad en
where , ya que no necesit a funciones de conj unt o. Esto es ms eficaz que aadi r la
rest riccin a having , debido a que evitamos hacer los clculos de grupo para todas las
filas que no pasan el filtro de where .
Ejemplo de Grupos y Agregados
Si queremos conocer cunt os artculos han sido vendi dos por cada proveedor
formul aremos la consul t a:
SELECT S.SNO, S.SNAME, COUNT(SE.PNO)
FROM SUPPLIER S, SELLS SE
WHERE S.SNO = SE.SNO
GROUP BY S.SNO, S.SNAME;
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
y obtendr emos:

SNO| SNAME | COUNT
----+-------+-----
1 | Smith | 2
2 | Jones | 1
3 | Adams | 2
4 | Blake | 3
Demos ahora una mirada a lo que est ocurriendo aqu. Primero, la join de las
tablas SUPPLIER y SELLS:
S.SNO | S.SNAME | SE.PNO
------+---------+-----
1 | Smith | 1
1 | Smith | 2
2 | Jones | 4
3 | Adams | 1
3 | Adams | 3
4 | Blake | 2
4 | Blake | 3
4 | Blake | 4
Ahora particionamos las tuplas en grupos reuniendo todas las tupl as que tiene el
mismo atribut o en S.SNO y S.SNAME:
S.SNO | S.SNAME | SE.PNO
------+-----------+-----
1 | Smith | 1
| 2
------------------------
2 | Jones | 4
------------------------
3 | Adams | 1
| 3
------------------------
4 | Blake | 2
| 3
| 4
En nuest ro ejempl o, obtenemos cuat ro grupos y ahora podemos aplicar el operador
agregado COUNT para cada grupo, obteniendo el resul t ado total de la consul t a dada
anteri or ment e.
Ntese que para el result ado de una consul t a utilizando GROUP BY y operadores
agregados para dar senti do a los atribut os agrupados, debemos pri mero obtener la
lista objetivo. Los dems atribut os que no aparecen en la clausul a GROUP BY se
seleccionarn utilizando una funcin agregada. Por otro lado, no se pueden utilizar
funciones agregadas en atribut os que aparecen en la clausul a GROUP BY.
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Having
La clausula HAVING trabaj a de forma muy parecida a la clausul a WHERE, y se
utiliza para consi derar slo aquellos grupos que satisfagan la cualificacin dada en la
misma. Las expresi ones permi ti das en la clausula HAVING deben involucrar funcionen
agregadas. Cada expresi n que utilice slo atribut os planos deber recogerse en la
clausula WHERE. Por otro lado, toda expresi n que involucre funciones agregadas
debe aparecer en la clausul a HAVING.
Ejemplo de Having
Si queremos solament e los proveedores que venden ms de un artculo,
utilizaremos la consul t a:
SELECT S.SNO, S.SNAME, COUNT(SE.PNO)
FROM SUPPLIER S, SELLS SE
WHERE S.SNO = SE.SNO
GROUP BY S.SNO, S.SNAME
HAVING COUNT(SE.PNO) > 1;
y obtendr emos:
SNO | SNAME | COUNT
----+-------+-----
1 | Smith | 2
3 | Adams | 2
4 | Blake | 3
CASE
Evala una lista de condiciones y devuelve una de las varias expresiones de resultado
posibles.
CASE tiene dos format os:
select activo, case when activo=1 then 'Activo' else 'Inactivo' end from
profesores;
SET
Modificar los parmet ros de configuracin para la variable durant e una sesin.
Los valores en vigor se pueden obtener utilizando el SHOW, y los valores pueden
devolverse a su situacin de defecto utilizando RESET. Valores y parmet ros son
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
sensibles a maysculas y minsculas. Ntese que el campo "valor" siempre se
especifica como una cadena de caracteres, de modo que se encierra entre comillas
simples.
SET TIME ZONE cambia la asignacin de zona horaria de defecto de la sesin. Una
sesin SQL siempre empieza con un valor inicial de asignacin de zona horaria. La
instruccin SET TIME ZONE se utiliza para cambiar la asignacin de zona horaria para
la sesin SQL actual.
Notas
La instruccin SET variable es una extensin del lenguaje de Postgres .
Refirase a SHOW y RESET para mostrar o inicializar los valores actuales.
SET TIME ZONE 'Europe/Rome';
SELECT CURRENT_TIMESTAMP AS ahora;
CREATE SEQUENCE
Synopsis
CREATE SEQUENCE seqname [ INCREMENT increment ]
[ MINVALUE minvalue ] [ MAXVALUE maxvalue ]
[ START start ] [ CACHE cache ] [ CYCLE ]

Entradas
seqname
El nombre de una secuencia que sera creada.
increment
La clausula INCREMENT increment es opcional. Un valor positivo hara una
secuencia ascendent e, uno negativo hara una secuencia descendent e. El valor por
omision es uno (1).
minvalue
La clausula opcional MINVALUE minvalue determi na el valor minimo que una
secuencia puede generar. El valor por omision es 1 y - 2147483647 para
secuencias ascendent es y descendent es, respectivament e.
maxvalue
Utilice la clausula opcional MAXVALUE maxvalue para determi nar el valor maximo
para una secuencia. Por omision son 2147483647 y - 1 para secuencias
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
ascendent es y descendent es, respectivament e.
start
La clausula opcional START start habilita la secuencia para que comience en
cualquier lugar. El valor de inicio por omision es minvalue para secuencias
ascendent es y maxvalue para las descendent es.
cache
La opcion CACHE cache permite que los numeros de la secuencia sean alojados
(preallocated) y almacenados en memoria para un acceso mas rapido. El valor
minimo es 1 (solo se puede generar un valor cada vez, i.e. sin cache) y es tambien
el valor por omision.
CYCLE
La palabra clave (keyword) CYCLE puede ser utulizada para permitir a la
secuencia continuar cuando el valor de maxvalue o el de minvalue ha sido
alcanzado por una secuencia ascendent e o descendent e respectivament e. Si el
limite es alcanzado, el siguiente numero generado sera cualquiera que para
minvalue o maxvalue sea tomado como apropiado.
CREATE SEQUENCE introducira una nueva secuencia generadora de numeros dentro de la
actual base de datos. Esto implica la creacion e inicializacion de una nueva tabla de una linea con
el nombre seqname. La secuencia generadora sera propiedad del usuario que ejecuta el
comando.
Depsues de que se crea una secuencia, puede utilizar la funcion nextval(seqname) par
aobtener una nuevo numero de la secuencia. La funcion currval('seqname') puede ser
utilizada para deter mi nar el numero devuelt o por la ultima llamada a nextval(seqname) desde
la secuencia especificada en la sesion en curso. La funcion setval('seqname', newvalue)
puede ser utilizada para configurar el valor actual de la secuenci a especificada. La siguient e
llamada a nextval(seqname) devolvera el valor dado mas la secuencia de increment o.
Crea una secuencia ascendente llamada serial, comenzando en 101:
CREATE SEQUENCE serial START 101;

Seleccione el siguiente numero de esta secuencia
SELECT NEXTVAL ('serial');
Sub - Consultas
En las clausul as WHERE y HAVING se permi t e el uso de subconsul t as (subselect s)
en cualquier lugar donde se espere un valor. En este caso, el valor debe derivar de la
evaluacin previa de la subconsul t a. El uso de subconsul t as ampla el poder expresivo
de SQL.
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Ejemplo de Sub Consultas
Si queremos conocer los artculos que tienen mayor precio que el artcul o llamado
Tornillos, utilizaremos la consul t a:
SELECT *
FROM PART
WHERE PRICE > (SELECT PRICE FROM PART
WHERE PNAME=Tornillos);
El resul t ado ser:
PNO | PNAME | PRICE
----+----------+-----
3 | Cerrojos | 15
4 | Levas | 25
Cuando revisamos la consul t a anterior, podemos ver la palabra clave SELECT dos
veces. La primera al princi pio de la consul t a - a la que nos referiremos como la
SELECT externa y la segunda en la clausul a WHERE, donde empieza una consul t a
anidada - nos referiremos a ella como la SELECT interna. Para cada tupla de la SELECT
externa, la SELECT interna deber ser evaluada. Tras cada evaluacin, conoceremos el
precio de la tupla llamada Tornillos, y podremos chequear si el precio de la tupla
actual es mayor.
Si queremos conocer todos los proveedores que no venden ningn artculo (por
ejempl o, para poderl os elimi nar de la base de datos), utilizaremos:
SELECT *
FROM SUPPLIER S
WHERE NOT EXISTS
(SELECT * FROM SELLS SE
WHERE SE.SNO = S.SNO);
En nuest ro ejempl o, obtendremos un resul t ado vaco, porque cada proveedor
vende al menos un artculo. Ntese que utilizamos S.SNO de la SELECT externa en la
clausula WHERE de la SELECT interna. Como hemos descrit o antes, la subconsul t a se
evala para cada tupla de la consul t a externa, es decir, el valor de S.SNO se toma
siempre de la tupla actual de la SELECT externa.
Unin, Interseccin, Excepcin
Estas operaciones calculan la unin, la interseccin y la diferenci a de la teora de
conjunt os de las tuplas derivadas de dos subconsul t as.
Ejemplo de Union, Intersect, Except
La siguient e consul t a es un ejempl o de UNION:
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
SELECT S.SNO, S.SNAME, S.CITY
FROM SUPPLIER S
WHERE S.SNAME = Jones
UNION
SELECT S.SNO, S.SNAME, S.CITY
FROM SUPPLIER S
WHERE S.SNAME = Adams;
Dar el resul t ado:
SNO | SNAME | CITY
---+-------+-----
2 | Jones | Paris
3 | Adams | Vienna
Aqu tenemos un ejempl o para INTERSECT:
SELECT S.SNO, S.SNAME, S.CITY
FROM SUPPLIER S
WHERE S.SNO > 1
INTERSECT
SELECT S.SNO, S.SNAME, S.CITY
FROM SUPPLIER S
WHERE S.SNO > 2;
que dar como resul t ado:
SNO | SNAME | CITY
---+-------+-----
2 | Jones | Paris
La nica tupla devuelta por ambas partes de la consulta es
la nica que tiene $SNO=2$.
Finalment e, un ejempl o de EXCEPT:
SELECT S.SNO, S.SNAME, S.CITY
FROM SUPPLIER S
WHERE S.SNO > 1
EXCEPT
SELECT S.SNO, S.SNAME, S.CITY
FROM SUPPLIER S
WHERE S.SNO > 3;
que dar como resul t ado:
SNO | SNAME | CITY
---+-------+-----
2 | Jones | Paris
3 | Adams | Vienna
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Insert Into
Una vez que se crea una tabla (vea Create Table ), puede ser llenada con tuplas
mediant e el comando INSERT INTO. La sintaxis es:
INSERT INTO table_name (name_of_attr_1
[, name_of_attr_2 [,...]])
VALUES (val_attr_1
[, val_attr_2 [, ...]]);
Para insert ar la primera tupla en la relacin SUPPLIER (de La Base de Datos de
Proveedores y Artculos ) utilizamos la siguient e inst ruccin:
INSERT INTO SUPPLIER (SNO, SNAME, CITY)
VALUES (1, Smith, London);
Para insert ar la pri mera tupla en la relacin SELLS, utilizamos:
INSERT INTO SELLS (SNO, PNO)
VALUES (1, 1);
Update
Para cambiar uno o ms valores de atribut os de tupl as en una relacin, se utiliza el
comando UPDATE. La sint axi s es:
UPDATE table_name
SET name_of_attr_1 = value_1
[, ... [, name_of_attr_k = value_k]]
WHERE condition;
Para cambiar el valor del atribut o PRICE en el artculo Tornillos de la relacin
PART, utilizamos:
UPDATE PART
SET PRICE = 15
WHERE PNAME = Tornillos;
El nuevo valor del atribut o PRICE de la tupla cuyo nombre es Tornillos es ahora
15.
Actualizano a partir de un SELECT
maritima=# UPDATE alex SET nombre=(SELECT Nombre_Pila from profesores p, alex a
where p.Apellido1=Nombre limit 1) where Ides=3;
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Delete
Para borrar una tupla de una tabla particul ar, utilizamos el comando DELETE
FROM.
La sint axi s es:
DELETE FROM table_name
WHERE condition;
Para borrar el proveedor llamado Smith de la tabla SUPPLIER, utilizamos la
siguient e inst ruccin:
DELETE FROM SUPPLIER
WHERE SNAME = Smith;
Clusula LIMIT
LIMIT le permi t e recuperar slo una porcin de los regist ros que se generan por el rest o de la
consul t a. Si se especifica un nmero lmite, no se devolvern ms regist ros que esa canti dad. Si
se da un valor de despl azami ent o, esa canti dad de regist ros ser salteada antes de comenzar a
devolver regist ros.
maritima=# SELECT * from buque limit 4 ;
ALTER
Este comando permi t e modificar la estruct ura de un objet o. Se pueden agregar / qui t ar campos
a una tabla, modificar el tipo de un campo, agregar / qui t ar ndices a una tabla, modificar un
trigger , etc.
ALTER DATABASE nombre_db RENAME TO nuevo_nombr e
FCLD=# ALTER DATABASE pue RENAME TO puest;
ALTER FUNCTION sqrt(integer) RENAME TO square_root;
FCLD=# ALTER FUNCTION f_vuelo(text) RENAME TO fk_vuelo;
ALTER GROUP nombre_Grupo ADD USER usuario
FCLD=# ALTER GROUP linux ADD USER kiki ;
ALTER GROUP nombre_Grupo RENAME TO nuevo_nombr e
FCLD=# ALTER USER kiki with passwor d 'kikla';
ALTER SEQUENCE serial RESTART WITH 105;
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
FCLD=# ALTER TABLE prues RENAME to reservas;
FCLD=# ALTER TABLE prue ADD jose varchar(12);
FCLD=# ALTER TABLE prue ALTER jose TYPE text;
FCLD=# ALTER TABLE prue DROP COLUMN jose ;
FCLD=# ALTER TABLE prue RENAME fecha TO Fechas;
FCLD=# ALTER TABLE prue ALTER fechas SET defaul t current_dat e;
FCLD=# ALTER TABLE prue ADD const rai nt nue check (precio >2);
mariti ma=# ALTER TABLE alex ADD CONSTRAINT a_pk primary key (Ides);
FCLD=# ALTER TABLE prue DROP CONSTRAINT nue;
EL CTID
Los CTID son usados para identificar regist ros fsicos especficos con valores de bloque y de
despl azami ent o (offset). Los CTID cambian despus de que los regist ros son modificados y
recargados. Son usados por ent radas indexadas para apunt ar a regist ros fsicos.
mariti ma=# SELECT ctid, * from profesores ;
Administrando una Base de datos
Ahora que Postgres est ejecut ndose podemos crear alguna base de datos para
experi ment ar con ella. Aqu describi mos las rdenes bsicas para admi ni st rar una
base de dat os.
La mayora de las aplicaciones Postgres asumen que el nombre de la base de dat os,
si no se especifica, es el mismo que el de su cuent a en el sistema.
Si el admi ni st rador de bases de dat os ha configurado su cuent a sin privilegios de
creacin de bases de dat os, entonces debern decirle el nombre de sus bases dat os. Si
este es el caso, entonces puede omitir la lect ura de esta seccin sobre creacin y
dest r ucci n de bases de dat os.
Software proporcionado por la propia distribucin de PostgreSQL
Aplicaciones cliente
Casi todas las aplicaciones se corresponden con una rden de SQL ejecut adas
dent ro de la base de datos, para saber ms detalles, consul t ar el manual de cada
programa tal como se hace en Linux / Unix:
$ <comando> man
clust erdb: equivalent e al comando CLUSTER de SQL, reorgani za clust er de tablas.
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
creat edb: crea una base de datos.
creat el ang: define un nuevo lenguaj e procedur al en una base de dat os.
creat euser: creacin de usuari os.
dropdb: borrar una base de datos.
dropl ang: borrar un lenguaj e procedur al.
dropuser: borrar un usuari o.
ecpg: SQL C preprocesador embebi do.
pg_config: recupera informaci n sobre la versin inst alada de PostgreSQL.
pg_dump: extrae una base de dat os en un fichero script o en otros format os.
pg_dumpall : extrae un cluster de base de datos en un fichero scri pt.
pg_rest ore: rest aura una base de dat os desde un fichero creado con pg_dump.
reindexdb: reindexa una base de datos.
vacuumdb: reorgani za y analiza una base de dat os.
Aplicaciones servi dor
initdb: crea un clust er de base de dat os.
ipcclean: libera la memori a compar t i da y los semforos de un servidor PostgreSQL.
pg_cont rol dat a: muest ra informaci n de cont rol de un clust er de base de datos.
pg_ctl: inicia, para o reinicia un servidor PostgreSQL.
pg_reset xlog: reinicia el write- ahead log y otras informaci ones de cont rol de un cluster de
base de datos.
post gres: corre un servidor PostgreSQL en modo "single- user".
post mast er: servidor de base de dat os PostgreSQL multi usuari o.
Programas
pgAdmi n III:
herrami ent a grfica, permi t e ver la estruct ur a de las bases de datos, realizar
operaciones SQL, ver dat os, o peraciones de admi ni st racin.
diseada para ejecut ar se en muchos sistemas operat ivos (Windows, Linux,
MacOS).

phppgAdmi n III:
PHPPgAdmi n es un poderosa herrami ent a de admi ni st racin basada en un interfaz
Web para bases de dat os PostgreSQL.
Equivalent e a la anterior herrami ent a, pero est realizada en una interfaz web
con PHP.
Tiene la ventaj a de que no requiere la inst alacin en los client es, as como se
puede cent rali zar la conexin a las bases de dat os, impidiendo el acceso desde
est aciones de trabaj o y, a la vez, facilitando el trabaj o a los potenci ales usuari os
porque no tienen que dedicar tiempo a configurar conexiones.
Dispone de soport e para procedi mient os almacenados, triggers y vistas.
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Para ms informaci n, ver sede web [htt p: / / phppgadmi n. sourceforge. net / ].

PgAccess:
Es una interfaz grfica para el gest or de bases de dat os PostgreSQL escrit o por
Const ant i n Teodorescu en el lenguaje Tcl /Tk.

Permit e al usuari o interact uar con PostgreSQL de una manera similar a muchas
aplicaciones de bases de dat os para PC, con mens de opciones y diversas
herrami ent as grficas. Esto significa que el usuari o puede evitar la linea de comandos
para la mayora de las tareas.
Tiene opciones para creacin de formul ari os e informes.
Ver sede web [htt p: / / www. pgaccess. org].
pgExplorer:
Herrami ent a de desarrollo para Postgres con una amplia interfaz grfica.
Se incluye un vista en rbol de las bases de dat os y sus respectivos objet os.
Permi te ingeniera inversa.
Tiene asist ent es para generar sentencias SQL.
Incluye diseador grfico de consul t as.
Ver sede web [htt p: / / www. pgexpl orer. org].
Herramient as de acceso mediant e OBDC y JDBC: se permi t e la conexin mediant e est os drivers,
que existen para casi todas las platafor mas, con lo que es fcil conect ar desde cualquier
product o que soport e ODBC/JDBC y tengamos los drivers adecuados.
Arquitectura
PostgreSQL funciona con una arqui tect ur a Cliente/ Servi dor, un proceso servidor (post mast er) y
una serie de aplicaciones cliente que realizan solicit udes de acciones cont ra la base de dat os a su
proceso servidor. Por cada una de estas aplicaciones client e, el proceso post mast er crea un
proceso post gres.
El proceso Postmaster:
Es el proceso inicial.
Gestiona los accesos multi usuari o y multiconexin.
Levant a la memori a compar t i da.
Est al tant o de solicitudes de nuevas conexiones.
Lanza procesos de atencin de demanda, reali zando las operaciones sobre la base de dat os a
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
solicit ud de los clientes.
Realiza el enlazado con los archivos de dat os, gestionando estos ficheros, donde los ficheros
pueden pertenecer a varias bases de dat os.
La comuni caci n ent re BackEnd/ FrontEnd se realiza mediant e TCP/IP, normal ment e por el
puert o 5432, creando un socket (/t mp/ . s.PGSQL.5432).
La memoria compartida:
Gestiona los recursos entre procesos backend.
Gestiona la cach del disco.
Maneja otras estruct uras internas.
De esta manera podemos definir el concept o de CLUSTER DE BASE DE DATOS , como una
inst ancia de PostgreSQL, donde se lanza un proceso post mast er, que puede gestionar varias
bases de dat os. En un servidor, pueden haber varios clust er, cada uno tendr su post mast er, y
cada post mast er escuchar por un puert o diferent e.
Almacenami ento fsico
En un servidor se crean uno o varios clust ers de bases de datos. La estruct ura fsica de del
cluster se crea con el programa init db, con este programa se deter mi na la ubicacin fsica y el
juego de caract eres.
En las inst alaciones automt icas a partir de paquet es (rpm, apt - get, etc) o en Windows, se crea
un clust er automt icament e con tres bases de dat os, templ at e0, templ at e1 y postgres. El
cluster se crea en un direct orio data dent ro del direct ori o donde se ha inst alado post gres.
Normal ment e, se define una variable de entorno, PGDATA que apunt e al direct ori o donde se crea
el clust er.
Ficheros:
post gresql.conf: fichero de configuracin principal, contiene la asignacin a los
parmet r os que configuran el funcionami ent o del servidor.
pg_hba.conf: fichero de configuracin de la autent icacin de los clientes y usuari os y del
acceso a las bases de dat os del clust er.
pg_ident.conf : fichero accesori o al anteri or, deter mi na como se realiza la autent icacin
ident que contiene la correspondenci a entre usuari os del Sistema Operativo y de
PostgreSQL.
PG_VERSION : fichero de texto con la versin de software Postgres que crea el cluster .
Otros ficheros:
post mast er. pi d: se crea cuando el post mast er arranca, contiene el PID del proceso
post mast er.
post mast er. opt s. contiene las opciones con las que se ha iniciado el post mast er.
recovery.conf, recovery.done: si se quiere o se ha hecho una recuperaci n.
Directorios:
base: las plantillas y las bases de datos. contiene un direct ori o por cada base de dat os, dent ro
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
hay un fichero por cada tabla o ndice de una base de datos, los nmeros corresponden a los
OIDs de las tablas o ndices.
template0 (1): contiene las definiciones de las tablas del sistema, vistas, funciones y tipos
est ndar. Nunca se debe modificar ni intent ar conect arse a ella, ya que est por si templ at e1
se corrompe..
template1 (N): base de dat os plantilla para crear nuevas bases de dat os, se puede modificar su
est ruct ura, aadiendo tablas, ndices, funciones, etc. Es la que se usar como plantilla para crear
otras bases de datos.
global: tablas e indices del catlogo comunes a todas las bases de datos.
catlogo compart i do: pg_shadow (usuarios), pg_dat abase, etc.
pgst at. st at: fichero usado por el monit or de estad st icas.
pg_cont rol: fichero con parmet r os del clust er, algunos inmut abl es (estableci dos en la
creacin del clust er) y otros variables (establecidos en la puest a en marcha).
pg_log : ficheros de segui mi ent o del servidor. Se crea en la versin de Windows, en la de Linux,
se debe indicar al arrancar el post mast er en qu fichero se hace el segui mient o.
pg_xlog : ficheros de diario del servidor (WAL).
Contiene los diarios de escrit ura adelant ada, para usarlos en las recuperaci ones
implement an como un conj unt o de segment os (ficheros) de un tamao de 16Mb y se
dividi dos en pginas de 8Kb.
Inicialment e se crea un fichero, y luego el sistema va creando ms segn las necesi dades.
pg_clog: ficheros de diario para las transacci ones (estado de cada transaccin).
Contiene los ficheros de confirmaci n.
diario de confirmacin refleja el estado de cada transaccin: confirmada, en progreso o
Un abort ada.
pg_multixact: contiene dat os sobre el estado mul ti - transacci onal, usado para los bloqueos
compart i dos de filas.
pg_twophase : ficheros de estado para las transacciones preparadas.
pg_subtrans : para realizar los savepoi nt s en medio de transacciones.
pg_tblspc: informacin sobre los tablespaces. Cuidado porque en linux/ uni x contiene enlaces a
los direct ori os donde se crean los tablespaces y hay que cont rolar, en caso de cambios de
ficheros, que estn correct os.
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Esquema lgico
Concepto de Cluster d e bases de datos en PostgreSQL:
reposi t ori o que engloba un conjunt o de bases de dat os, que contienen objetos que se pueden
guardar en distint os tablespaces y un conjunt o de usuari os que se conect an al clust er.

una base de dat os engloba un conj unt o de esquemas, los cuales tienen un usuario propiet ari o. En
los esquemas es donde se crean los objet os (tablas, ndices, procedi mient os, vistas, etc.)
una sesin se abre cont ra una base de datos
Con lo que tenemos aqu los tres element os princi pales a nivel lgico en un cluster:
Bases de datos: agrupaci ones de esquemas. Por defect o, siempre hay tres bases de dat os
creadas, templ at e0, templ at e1 y postgres.
Tablespaces: ubicaciones alternativas a la que por defect o tiene el cluster. Por defect o no se
crea ninguno.
Roles : engloba el concept o de usuari os (roles de login) y grupos de permi sos (roles de grupo),
est os lti mos son lo mismo que los roles de Oracle. Hasta la versin 8 de Postgres no se podan
anidar roles, ahora si. Por defect o, si al crear el clust er no se ha indicado otro usuario, se crea el
usuari o postgres como super usuari o.
Hay que tener en cuenta:
Todos los usuari os son comunes a las bases de dat os del clust er, se pueden conect ar con
cualqui era de las bases de datos. En este punt o, las bases de dat os se comport an como
esquemas de Oracle.
Las bases de dat os son independi ent es entre ellas, no se pueden ver objetos de una base de
datos desde otra base de dat os, except o si se usan dblinks. Esto marca cmo se deben crear las
bases de dat os:
si es un servidor que acoge proyect os separados y no se han de interrel acionar:
separacin en bases de dat os distint as.
si es un servidor de proyect os con recursos comunes: una nica base de datos y distint os
esquemas para cada proyect o.
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Creacin de una base de datos

Creacin de bases de dat os Una base de datos se puede crear desde la lnea de comandos del
sistema operativo (con el usuari o de sistema) o desde una conexin a una base de dat os.(con un
usuari o que tenga privilegios para crear bases de datos).
creat edb [OPCIN]... [NOMBRE] [DESCRIPCIN ]
Opciones:
- D, - - tablespace=TBLSPC tablespace por omisin de la base de dat os
- E, - - encodi ng=CODIFICACIN codificacin para la base de datos
- O, - - owner =DUEO usuari o que ser dueo de la base de dat os
- T, - - templ at e=PATRN base de dat os pat rn a copiar
- e, - - echo most rar los comandos enviados al servidor
- q, - - quiet no desplegar mensaj es
- - help most rar esta ayuda y salir
- - version most rar el nmero de versin y salir
Opciones de conexin:
- h, - - host =ANFITRIN nombre del servi dor o direct orio del socket
- p, - - port =PUERTO puert o del servidor
- U, - - username =USUARIO nombre de usuario para la conexin
- W, - - passwor d pregunt ar la cont rasea
Si no se especifica, se crear una base de datos con el mismo nombre que el usuari o actual.
Creacin de roles (usuarios)
En PostgreSQL los usuari os son tipos de roles, el role es el concept o general.
Los roles son globales al cluster, se almacenan en la tabla del catlogo pg_aut hi d y se pueden
consul t ar en las vistas pg_user y pg_roles.
creat euser [OPCIN]... [ROL]
Opciones:
- s, - - super user el rol ser un superusuari o
- S, - - no- superuser el rol no ser un super usuari o
- d, - - createdb el rol podr crear bases de dat os
- D, - - no- createdb el rol no podr crear bases de dat os
- r, - - createrol e el rol podr crear otros roles
- R, - - no- creat erol e el rol no podr crear otros roles
- l, - - login el rol podr conect arse (predet er mi nado)
- L, - - no- login el rol no podr conect arse
- i, - - inherit el rol heredar los privilegios de los roles de
los cuales es miembr o (predet er mi nado)
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
- I, - - no- inheri t rol no heredar privilegios
- c, - - connection- limit =N lmite de conexiones para el rol
(predet er mi nado: sin lmite)
- P, - - pwprompt asignar una cont rasea al nuevo rol
- E, - - encrypt ed almacenar la const rasea cifrada
- N, - - unencrypt ed almacenar la cont rasea sin cifrar
- e, - - echo most rar los comandos a medi da que se ejecut an
- q, - - quiet no escribir ningn mensaj e
- - help desplegar esta ayuda y salir
- - version desplegar informaci n de versin y salir
Opciones de conexin:
- h, - - host =ANFITRIN nombre del servi dor o direct orio del socket
- p, - - port =PUERTO puert o del servidor
- U, - - username =NOMBRE nombre de usuari o con el cual conect arse
(no el usuario a crear)
- W, - - passwor d pedir cont rasea para conect arse
Si no se especifican - s, - S, - d, - D, - r, - R o el ROL, se pregunt ar interactivament e.
El comando CREATE USER es ahora un alias de CREATE ROLE, pero con la opcin LOGIN por
defect o.
Esquemas
Por lti mo, las bases de dat os se organi zan mediant e esquemas, contenedores lgicos de objetos
de base de dat os (tablas, vistas, procedi mi ent os, etc.), bsicament e son un espacio de nombres.
Es caract er stico de los esquemas:
tienen un propiet ari o.
Permit en el uso de la base de dat os por mlti ples usuari os sin interferenci as.
Permit en que se puedan instalar aplicaciones realizadas por terceros si que existan
colisiones en los nombres de los objet os.
Acceder a una base de datos
Una vez que ha const r ui do una base de datos, puede acceder a ella:
Ejecutando los programas de moni t ori zaci n de Postgres (por
ejempl o psql) los cuales le permi t en introduci r, editar y ejecut ar
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
rdenes SQL interactivament e
Escribiendo un programa en C usando la librera de subrut i nas LIBPQ,
la cual le permi t e enviar rdenes SQL desde C y obtener mensaj es de
respuest a en su programa. Esta interfaz es discuti da ms a fondo en
la Gua de Programadores de PostgreSQL.
Puede que desee ejecut ar psql, para probar los ejempl os en este manual. Lo puede
activar para la base de dat os mydb escribiendo la orden:
% psql mydb
Se le dar la bienveni da con el siguient e mensaj e:
Welcome to the POSTGRESQL interactive sql monitor:
Please read the file COPYRIGHT for copyright terms of
POSTGRESQL
type \? for help on slash commands
type \q to quit
type \g or terminate with semicolon to execute query
You are currently connected to the database: template1
mydb=>
Este prompt indica que el moni t or est listo y puede escribir sus consul t as SQL
dent ro de un espacio de trabaj o mant eni do por el moni t or. El programa psql responde
a los cdigos de escape que empiezan por el carct er \. Por ejempl o, puede obtener
la ayuda acerca de la sint axis de varias rdenes SQL Postgres escribiendo:
mydb=> \h
Una vez que haya termi nado de introduci r consul t as, puede pasar el conteni do del
espacio de trabaj o al servidor Postgres escribiendo:
mydb=> \g
Esto le dice al servidor que procese la consul t a. Si termi na su consul t a con un
punt o y coma, la \g no es necesaria. psql procesar aut omt icament e las consul t as
termi nadas con punt o y coma. Para leer consul t as desde un archivo, digamos myFile,
en lugar de introduci rl as interactivament e, escriba:
mydb=> \i nombreDelFichero
Para salir de psql y regresar a Unix escriba:
mydb=> \q
y psql termi nar y volver a la lnea de rdenes. (Para conocer ms cdigos de escape,
escriba \ h en el prompt del moni t or). Se pueden utilizar espacios en blanco (por
ejempl o espacios, tabulador y el carct er de nueva lnea) en las consul t as SQL. Las
lneas simpl es coment adas comienzan por . Lo que haya despus de los guiones
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
hast a el final de lnea ser ignorado. Los coment ari os mlti ples y los que ocupan ms
de una lnea se sealan con /* ... */.
Eliminando bases de datos
Si es el admi ni st rador de la base de dat os mydb, puede eliminarla utilizando la
siguient e orden Unix:
% dropdb mydb
Esta accin elimina fsicament e todos los archivos Unix asociados a la base de
datos y no pueden recuperar se, as que deber hacerse con precauci n.
Gestionando Usuarios
En orden a establ ecer una conexin a PostgreSQL, usted debe proporci onar una
forma bsica de identificacin. Esta es denomi nada un nombre de usuario, que
identifica al usuari o al cual el sistema reconocer como conect ado a una base de
datos. Los usuari os dent ro de PostgreSQL no estn necesari ament e relacionados con
los usuarios del sistema operativo (los cuales son tambin denomi nados cuent as del
sistema), aunque usted puede escoger nomi nar a sus usuarios de PostgreSQL como a
las cuent as de sistema a travs de las que ellos accedern.
Cada usuari o tiene un ID de sistema interno en PostgreSQL (llamado sysid), as
como una cont rasea, aunque la cont rasea no es necesari ament e impresci ndi bl e
para conect ar (depender de la configuracin del archivo pg_hba.conf; (vea el Capt ul o
8, para ms det alles). El ID de sistema del usuari o es utilizado para asociar objetos en
una base de datos con su propi et ari o (el usuari o que est aut ori zado para dar / qui t ar
privilegios sobre un objeto).
As como son usados para asociar objetos de base de datos con su propi et ari o, los
usuari os tambin pueden tener permi sos globales asignados a ellos cuando estos son
creados. Estos permi sos o privilegios deter mi nan si un usuari o podr o no crear y
eliminar bases de dat os, o si el usuari o es o no un superusuari o (un usuario que tiene
todos los permi sos, en todas las bases de datos, incluyendo la capaci dad de crear a
otros usuari os). La asignacin de estos permi sos puede ser modificada en cualquier
moment o por cualquier super usuari o.
PostgreSQL crea por defect o a un super usuari o llamado post gres. Todos los dems
super usuari os pueden ser creados por ste, o por cualquier otro superusuri o creado
post eri or ment e.
Viendo a los Usuarios
Toda la informaci n relativ a los usuarios es elamacenada en una tabla de sistema
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
de PostgreSQL llamada pg_shadow, que se muest r a en la Tabla 10- 1. Esta tabla es
slo seleccionable por los superusuari os, aunque una vista limitada de esta tabla,
llamada pg_user, es accesible por los usuari os normal es.
La tabla pg_shadow
Columna Tipo
usename name
usesysid integer
usecreatedb boolean
usetrace boolean
usesuper boolean
usecatupd boolean
passwd text
valuntil abstime
La principal diferencia ent re los dat os seleccionables en pg_user y pg_shadow es
que el actual valor de la columna passwd no es most rado (ste es reempl azado por
asteri scos). Esta es una caract er stica de seguri dad para garanti zar que los usuari os
normal es no estn capaci tados para deter mi nar las cont raseas de los dems.
La columna usename almacena el nombre del usuari o del sistema, el cual es una
cadena de caracteres nica (no pueden haber dos usuari os con mismo nombre, ya que
los usuarios son objet os globales de base de dat os). Similarment e, la columna
usesysi d almacena un valor entero nico asociado con el usuari o. Las columnas
usecreat edb y usesuper respectivament e corresponden al par de privilegios que
pueden ser establ eci dos tras la creacin del usuari o, tal como se document a en la
seccin denomi nada ` ` Cr eando Usuarios' ' .
Creando Usuarios
PostgreSQL proporci ona dos mtodos para la creacin de usuarios de bases de
datos. Cada uno de ellos requiere autenticacin como super usuari o, ya que slo los
super usuari os pueden crear nuevos usuari os.
El primer mt odo es a travs del uso del comando SQL CREATE USER, el cual puede
ser ejecut ado a travs de cualqui er cliente PostgreSQL client (p.ej., psql). El segundo es
un programa de lnea de comandos llamado creat euser, el cual puede ser ms
convenient e para un admi ni st rador de sistemas, ya que puede ser ejecut ado como un
simple comando sin necesi dad de interact uar a travs de un cliente PostgreSQL.
Las siguient es secciones document an cada uno de est os mt odos.
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Creando un usuario con el comando SQL CREATE USER
El comando CREATE USER requiere slo un parmet r o: el nombre del nuevo
usuari o. Tambin hay una variedad de opciones que pueden ser estableci das,
incluyendo un cont rasea, un ID de sistema explcito, grupo, y un juego de permi sos
que pueden ser especficament e defini dos. Aqu est la sint axis complet a para CREATE
USER:
CREATE USER nombre_usuario
[ WITH [ SYSID uid ]
[ PASSWORD 'password' ] ]
[ CREATEDB | NOCREATEDB ]
[ CREATEUSER | NOCREATEUSER ]
[ IN GROUP groupname [, ...] ]
[ VALID UNTIL 'abstime' ]
En sta sint axis, nombre_usuari o es el nombre del nuevo usuario que va a ser
creado. Usted no puede tener dos usuari os con el mismo nombre. Mediant e el uso de
la palabra clave WITH, pueden aplicarse las palabras clave SYSID y PASSWORD.
Cada una de las otras palabras clave opcional es pueden seguir en el orden
displayado (no se requiere el uso de WITH). Lo siguient e es una explicacin detallada
de cada palabra clave opcional y su significado:
SYSID uid: Especifica que el ID de sistema que va a definirse debe
establecerse al valor de uid. Si se omite, un razonabl e y nico valor
numrico por defect o es escogido.
PASSWORD 'password': Establece la nueva cont rasea del usuario a
passwor d. Si no se especifica, la cont rasea por defect o es NULL.
CREATEDB | NOCREATEDB: Usando la palabra clave CREATEDB se le
garanti za al nuevo usuari o el privilegio de crear nuevas bases de dat os,
as como el de dest rui r las de su propiedad. Usando NOCREATEDB se
deniega este permi so (que es lo que ocurre por defect o).
CREATEUSER | NOCREATEUSER: Garanti za el privilegio de crear nuevos
usuari os, lo cual implcitament e crea a un super usuari o. Adviert a que un
usuari o con los privilegios de crear a otros usuari os tendr todos los
privilegios, en todas las bases de dat os (incluyendo los permi sos para
crear una base dedat os, aunque se haya especificado NOCREATEDB).
NOCREATEUSER explcitament e fuerza a la situacin por defect o, que
deniega el privilegio.
IN GROUP nombre_grupo [, ...]: Aade al nuevo usuari o al grupo
llamado nombre_grupo. Pueden ser especificados mlti pl es nombres de
grupo, separndol os mediant e comas. El/los grupos deben existir para
que funcione el estament o.
VALID UNTIL 'abstime': Establece que la cont rasea del usuario
expirar el absti me, el cual debe ser un format o reconoci ble de
fecha/ hor a (timest amp). Tras esa fecha, la cont rasea se reset ea, y la
expiracin se hace efectiva.
VALID UNTIL 'infinity': Establece validez permanent e para la
cont rasea del usuario.
Si no se especifica CREATEDB o CREATEUSER, los usuari os son implcitament e
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
` ` nor mal es' ' , sin privilegios especiales. No pueden crear bases de dat os u otros
usuari os, ni pueden eliminar bases de dat os o usuari os. Estos usuari os pueden
conect ar a bases de dat os en PostgreSQL, pero slo pueden ejecut ar estament os para
los que han sido aut ori zados (vea la seccin nomi nada ` ` Ot orgando Privilegios' ' para
ms informaci n).
El Siguient e Ejemplo crea a un usuari o normal llamado salesuser. Tambin
est ablece una cont rasea de N0rm4! mediant e el uso de la clusul aby the use of the
WITH PASSWORD. Omitiendo la clusula VALID UNTIL, esta cont rasea nunca
expirar.
Ejemplo de Creacion de un usuario normal.
template1=# CREATE USER salesuser
template1-# WITH PASSWORD 'N0rm4!';
CREATE USER
El mensaj e del servidor CREATE USER retornado en el Ejemplo anterior indica que
el usuari o fue creado correct ament e. Otros mensaj es que usted puede recibir son los
siguient es:
ERROR: CREATE USER: permission denied
Este mensaj e es retornado si el usuari o que utiliz el comando CREATE USER no es
un super usuari o. Slo los super usuari os pueden crear nuevos usuarios.
ERROR: CREATE USER: user name "salesuser" already exists
Este mensaj e indica que un usuari o con el nombre salesuser ya existe.
Si desea crear un usuari o con la capaci dad de crear bases de dat os en PostgreSQL
pero que no pueda crear o eliminar a usuari os PostgreSQL, puede especificar la
palabra clave CREATEDB en vez de CREATEUSER. Esto permi t e que el usuario pueda
crear bases de datos arbit rariament e, as como eliminar cualquier base de dat os de la
que l sea propiet ari o. Para ms informaci n sobre la creacin y eliminacin de bases
de dat os, consul t e los topicos anteriores de este manual.
El proxi mo Ejemplo ilust ra la creacin de un usuari o llamado dbuser quien tiene
permi sos para crear nuevas bases de dat os. Esto se hace mediant e la especificacin de
la palabra clave CREATEDB tras el nombre de usuari o. Advierta tambin el uso de las
palabras clave WITH PASSWORD y VALID UNTIL. Estas establecen la cont rasea para
dbuser a DbuS3r, la cual ser vlida hast a el 11 de Noviembre de 2002.
Ejemplo de la creacion un usuario con permisos CREATEDB
template1=# CREATE USER dbuser CREATEDB
template1-# WITH PASSWORD 'DbuS3r'
template1-# VALID UNTIL '2002-11-11';
CREATE USER
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
El hecho de resetear una cont rasea de usuari o expirada no modifica el valor de
VALID UNTIL. En orden a reactivar el acceso de un usuari o cuya cont rasea ha
expirado, tant o la palabra clave WITH PASSWORD y VALID UNTIL deben ser
proporcionadas al comando ALTER USER. Vea la seccin denomi nada ` ` Al t erando
Usuarios' ' para ms informacin.
Advertencia: Los valores en VALID UNTIL slo son relevant es en sistemas que no
son de confianza; los sitios de confianza no requieren cont raseas. Vea el Capt ulo 8
para ms informaci n sobre autenticacin basada en mqui nas.
Puede desear crear un super usuari o alternat ivo al usuari o post gres, aunque debera
tener cuidado a la hora de crear super usuari os. Estos usuarios tienen garanti zados
todos los privilegios dent ro de PostgreSQL, incluyendo la creacin de usuari os,
eliminacin de usuari os, y eliminacin de bases de datos. El Ejemplo 10- 3 demuest ra
la creacin de un superusuari o PostgreSQL llamado manager desde el prompt de psql.
Ejemplo de la Creacin de un super usuari o
template1=# CREATE USER manager CREATEUSER;
CREATE USER
Creando un usuario con el script createuser
El script creat euser es ejecut ado directament e desde la lnea de comandos, y puede
operar de dos formas. Si se utiliza sin argument os, l interactivament e le pedir el
nombre de usuari o y cada uno de los privilegios que se le van a asignar, e intent ar
realizar una conexin local a PostgreSQL. Alternativament e, puede opt ar por
especificar las opciones y el nombre del usuario a ser creado en la misma lnea de
comandos.
Al igual que con otras aplicaciones de lnea de comandos para PostgreSQL, los
argument os pueden ser sumi ni st rados en format o corto (con un nico guin, y un
carct er), o en su format o largo (con dos guiones, y el nombre compl et o del
argument o).
Aqu tiene la sint axis de creat euser:
createuser [ opciones ] [ nombre_usuario ]
El nombre_usuari o en la sint axis represent a el nombre del usuario que va a crear.
Reempl ace opciones con una o ms de las siguient es:
-d, -createdb: Equivalent e a la palabra clave CREATEDB del
comando SQL CREATE USER. Permi te al nuevo usuari o crear bases de
datos.
-D, -no-createdb: Equivalent e a la palabra clave NOCREATEDB
del comando SQL CREATE USER. Explcitament e indica que el nuevo
usuari o no puede crear bases de dat os. Esta es la situacin por
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
defect o.
-a, -adduser: Equivalent e a la palabra clave CREATEUSER del
comando SQL CREATE USER. Perimt e al nuevo usuario la creacin de
otros usuarios, y asigna el stat us de super usur ari o al usuario
(activando todos los privilegios dent ro de PostgreSQL).
-A, -no-adduser: Equivalent e a la palabra clave NOCREATEUSER
del comando SQL CREATE USER. Explcitament e indica que el nuevo
usuari o no es super usuari o. Esta es la situacin por defect o.
-i SYSID, -sysid=SYSID: Establece el nuevo ID de sistema del
usuari o a SYSID.
-P, -pwprompt: Result a en una peticin de introduccin de
cont rasea, permi tindol e est ablecer la cont rasea del nuevo
usuari o.
-h NOMBRE_MAQUINA, -host=NOMBRE_MAQUINA: Especifica desde
qu NOMBRE_MAQUINA se conect ar, adems de la local (localhost),
o la mqui na defini da por la variable de entorno PGHOST.
-p PUERTO, -port=PUERTO: Especifica que la conexin de base de
datos se realizar por el puert o PUERTO, en vez de por el puert o por
defect o (usual ment e el 5432).
-U NOMBRE_USUARIO, -username=NOMBRE_USUARIO: Especifica
que NOMBRE_USUARIO ser el usuario que conect e a PostgreSQL (por
defect o se conect a usando el nombre de usuari o del sistema).
-W, -password: Result a en una peticin de cont rasea para el
usuari o que conect a, lo cual ocurre automt icament e si el archivo
pg_hba.conf est configurado para no confiar en la mqui na
solicitant e.
-e, -echo: Causa que el comando CREATE USER enve a
PostgreSQL para ser displayado todo lo que se ejecut e con
createuser.
-q, -quiet: Previene que la salida sea enviada a stdout (aunque los
errores sern enviados a stderr).
Si alguno de los argument os - d, - D, - a, - A, o nombre_usuari o son omiti dos,
createuser le pedi r la introducci n de cada uno de ellos. Esto se debe a que
PostgreSQL no realizar ninguna asuncin sobre los privilegios que se deben asignar
al nuevo usuari o, ni sobre el nombre del mismo. El Ejempl o 10- 4 crea a un usuario
llamado newuser, el cual no tiene permi sos ni para crear bases de datos ni para crear
nuevos usuarios.
Ejemplo de la creacion de un usuario con createuser
[jworsley@booktown ~]$ createuser -U manager -D -A
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
newuser
CREATE USER
Advierta el flag ` ` - U manager' ' pasado al script createuser. Este indica que el
usuari o que el nombre de usuari o con el que se realizar la conexin a PostgreSQL es
manager, y no jworsley como el scri pt podra haber asumi do, basndose en el nombre
de la cuent a de sist ema que ha invokado al script.
Si usted prefiere que de forma interactiva se le vaya pregunt ando por cada
parmet r o de configuracin (en vez de tener que recordar el significado de cada flag),
puede simplement e omitirlos. El script creat euser le pregunt ar por las opciones
bsicas de creat euser. Estas opciones incluyen el nombre de usuari o PostgreSQL, si el
usuari o podr crear bases de dat os, y si el usuari o podr o no crear nuevos usuari os
para PostgreSQL.
El Ejemplo siguient e demuest r a el uso del script creat euser en modo interactivo. El
efecto de este ejempl o es el mismo que el eject uado en una sla lnea en el Ejemplo
10- 4.
Ejemplo de la creacin interactiva con creat euser
[jworsley@booktown ~]$ createuser
Enter name of user to add: newuser
Shall the new user be allowed to create databases? (y/n) n
Shall the new user be allowed to create more new users?
(y/n) n
CREATE USER
Alterando (Modificando) Usuarios
Los usuarios existent es slo pueden ser modificados por superusuari os
PostgreSQL. Las posibles modificaciones incluyen cada una de las opciones
disponi bles a la hora de la creacin del usuari o (p.ej., cont rasea, fecha de expiracin
de la cont rasea, permi sos globales), except o el ID de sistema para un usuari o
existent e, que no puede ser modificado. La modificacin de usuari os existent es se
realiza medi ent e el uso del estament o SQL ALTER USER.
Aqu tiene la sint axis de ALTER USER:
ALTER USER nombre_usuario
[ WITH PASSWORD 'password' ]
[ CREATEDB | NOCREATEDB ]
[ CREATEUSER | NOCREATEUSER ]
[ VALID UNTIL 'abstime' ]
El argument o requeri do nombre_usuari o especifica el usuario a ser modificado.
Cualquiera de los siguient es parmet r os puede ser especificado adicional ment e:
WITH PASSWORD 'password': Establece la cont rasea del usuario a
passwor d.
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
CREATEDB | NOCREATEDB: Garanti za o revoka al usuari o el privilegio de
crear bases de dat os.
CREATEUSER | NOCREATEUSER: Garanti za o revoak al usuari o el stat us
de superusuari o, el cual le activa todos los privilagios dent ro de
PostgreSQL (el ms not abl e, la capaci dad de crear y dest r ui r usuari os y
superusuari os).
VALID UNTIL 'abstime': Establece que la cont rasea del usuari o
expirar el absti me, el cual debe ser algn format o vlido timest amp.
Este valor slo es relevant e para sistemas que requieran autentificacin
medi ant e cont rasea, ya que de lo cont rari o es ignorado (p.ej., para sitios
de confianza).
Una funcin comn de ALTER USER es resetear la cont rasea (y potencial ment e la
fecha de expiracin) de un usuari o. Si un usuario PostgreSQL tiene una fecha de
expiracin establecida y la fecha ha pasado, y el usuario necesit a autenti ficacin
basada en cont rasea, un superusuari o tendr que reset ear tant o la cont rasea como
la fecha de expiracin para reactivar la capaci dad de conexin del usuario. Si desea
que nunca expire una cont rasea de usuari o, esteblezca la fecha especial infinity.
El Ejemplo siguient e modifica a un usuari o llamado salesuser. La cont rasea del
usuari o est configurada a n3Wp4s4 por la clusula WITH PASSWORD, y expira el 1 de
Enero del 2003, por la clusul a VALID UNTIL.
Ejemplo de re- establecer una contrasea
template1=# ALTER USER salesuser
template1-# WITH PASSWORD 'n3WP4s4'
template1-# VALID UNTIL '2003-01-01';
ALTER USER
En alguna ocasin puede desear o necesi tar otorgar a un usuari o privilegios
adicionales que original ment e no tena. El uso de CREATEUSER en el proxi mo ejempl o
modifica los del usuario salesuser y le otorga todos los privilegios en PostgreSQL,
convirtiendo al usuari o en superusuari o. Adviert a que esto activa al CREATEDB, ya
que los superusuari os pueden crear bases de datos implcitament e.
Ejemplo de aadir privilegi os de superusuario

template1=# ALTER USER salesuser
template1-# CREATEUSER;
ALTER USER
De forma cont rari a, pueden existir ocasiones en las que un usuari o no debe
ostent ar por ms tiempo deter mi nados privilegios. Estos pueden ser fcilment e
eliminados por un superusuari o con las palabras clave NOCREATEDB y
NOCREATEUSER.
Ejemplo de eliminar privilegios de superusuari o
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
template1=# ALTER USER salesuser
template1-# NOCREATEDB NOCREATEUSER;
ALTER USER
Advertencia: Como cualquier super usuari o puede revocar privilegios a cualquier
super usuari o, o incluso eliminarl o, debe ser extremadament e cuidadoso cuando
asigne el privilegio CREATEUSER.
Eliminando Usuarios
Los usuarios de PostgreSQL pueden ser eliminados en cualqui er moment o del
sistema por los superusuari os. La nica rest riccin es que un usuario no puede ser
eliminado si existen bases de dat os de su propiedad. Si un usuario es propiet ari o de
una base de dat os, esa base de dat os debe ser eliminada ant es de poder eliminar al
usuari o.
Al igual que con la creacin de usuari os en PostgreSQL, hay dos mt odos medi ant e
los cuales los usuarios pueden ser eliminados. Estos son el comando SQL DROP USER,
y el ejecut able en lnea de comandos dropuser
Eliminando usuarios mediante el comando SQL DROP USER
Un superusuari o puede eliminar a un usuari o usando el comando DROP USER
desde cualquier client e PostgreSQL vlido. El programa psql es el ms comnment e
utilizado para este tipo de tareas.
Aqu tiene la sint axios para DROP USER:
DROP USER nombre_usuario
En sta sint axis, nombre_usuari o es el nombre del usuari o que va a ser
permanent ement e elimi nado del sistema. El Ejemplo 10- 9 muest r a el uso del client e
psql para conect ar a PostgreSQL como el usuario manager en orde a eliminar al
usuari o salesuser.
Ejemplo de eliminar a un usuario con DROP USER
[jworsley@booktown ~]$ psql -U manager template1
Welcome to psql, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help on internal slash commands
\g or terminate with semicolon to execute query
\q to quit
template1=# DROP USER salesuser;
DROP USER
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
El mensaj e del servidor DROP USER indica que el usuari o fue elimi nado con xito
del sistema. Otros mensaj es que usted puede recibir incluyen:
ERROR: DROP USER: permission denied
Indica que el usuari o que inici el comando no tena privilegios para eliminar a un
usuari o. Slo los super usuari os pueden eliminar usuarios de bases de dat os
existent es.
ERROR: DROP USER: user "salesuser" does not exist
Indica que no existe un usuario con el nombre salesuser.
Eliminando usuarios mediante el comando del sistema dropuser
El comando dropuser opera igual que el script creat euser. Ofrece las mismas
opciones de conexin, garanti zando que puede ser usado remot ament e tant o como
local ment e, y requiere slo el nombre de usuari o del usauri o que va a ser eliminado
del sistema.
Aqu tiene la sint axis de dropuser:
dropuser [ options ] [ username ]
Cada una de las opciones de conectividad son idnticas a las de creat euser,
descri tas en la seccin denomi nada Creando un usuario con el script creat euser, que
ya vimos anterior ment e. El Ejemplo 10- 10 demuest r a el mismo efecto que el
est ament o SQL del Ejempl o 10- 9 conect ando al mot or PostgreSQL como el usuari o
manager, y elimi nando al usuari o denomi nado salesuser.
Ejemplo de Eliminar a un usuario con dropuser
[jworsley@booktown ~]$ dropuser -U manager salesuser
DROP USER
La salida de dropuser es la misma que la del comando SQL DROP USER. Si usted
omite el nombre de usuari o a eliminar, ser interrogado interactivament e por el
nombre del usuario a ser eliminado del sistema.
Manejando Grupos
Los grupos sirven para simplificar la asignacin de privilegios. Los privilegios
ordi nari os debern ser asignados a un nico usuari o, uno cada vez. Esto puede resul t ar
tedioso si los usuari os a los que hay que asignar los mismos accesos a una gran
variedad de objet os de base de dat os.
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Los grupos son creados para evitar este problema. Un grupo requiere un nombre, y
puede ser creado vaco (sin usuari os). Una vez creado, los usuari os que se pretende
compart an permi sos comunes son aadi dos todos al grupo, y quedan asociados al
grupo por su nmero de miembro. Los permi sos en los objet os de base de dat os son
entonces asignados al grupo, en vez de a cada uno de los miembr os del grupo. Para
un sistema con muchos usuarios y bases de dat os, los grupos haccen que la
asignacin de permi sos sea ms cmoda para el admi ni st rador.
Nota: Los usuari os pueden pert enecer a cualqui er nmero de grupos, o a
ninguno.
Creando y Eliminando Grupos
Antes de que se inicie con la gestin de grupos, debera ant es aprender a crearl os y
eliminarl os del sistema. Cada uno de est os procedi mi ent os requiere privilegios de
super usuari o. Vea la seccin llamada Manejando Usuarios, que ya vimos
anteri or ment e, para aprender ms sobre superusuari os.
Creando un Grupo
Cualquier superusuari o puede crear un nuevo grupo en PostgreSQL con el comando
CREATE GROUP. Aqu tiene la sintaxis de CREATE GROUP:
CREATE GROUP nombre_grupo
[ WITH [ SYSID groupid ]
[ USER username [, ...] ] ]
En sta sint axis, nombre_grupo es el nombre del grupo a ser creado. Un nombre de
grupo debe comenzar por una carct er alfabtico, y no puede superar los 31
caract eres de longit ud. El proporci onar la palabra clave WITH palabra clave le permi t e
especificar cualquiera de los atribut os opcional es. Si desea especificar el ID de sistema
a usar con el nuevo grupo, utilice la palabra clave SYSID para especificar el valor de
groupi d. Use la palabra clave USER para incluir a uno o ms usuari os al grupo en
tiempo de creacin. Separe los disti nt os usuari os mediant e comas.
Adicional ment e, el usuario PostgreSQL y las tablas de grupos operan
separadament e las unas de las otras. Esta separacin que los ID de usuari os y grupos
puedan ser idnticos dent ro del sistema PostgreSQL.
Como ejempl o, el siguient e crea el grupo sales, y aade dos usuarios al grupo en
tiempo de creacin. Estos usuari os son allen y vincent.
Ejemplo de crear un grupo
booktown=# CREATE GROUP sales
booktown-# WITH USER allen, vincent;
CREATE GROUP
El mensaj e del servidor CREATE GROUP indica que el grupo fue creado con xito.
Usted puede verificar la creacin del grupo, as como ver todos los grupos existent es,
con una consul t a a la tabla de sistema pg_group. El Ejemplo siguient e ejecut a dicha
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
consul t a.
Ejemplo de verificar un grupo
booktown=# SELECT * FROM pg_group;
groname | grosysid | grolist
------------+----------+-------------
sales | 1 | {7017,7016}
accounting | 2 |
marketing | 3 |
(3 rows)
Advierta que la columna grolist es un array, que contiene el ID de usuari o de
PostgreSQL de cada usuari o en el grupo. Estos son los mismos IDs de usuario que
vimos en la vista de pg_user. Por ejempl o:
booktown=# SELECT usename FROM pg_user
booktown-# WHERE usesysid = 7017 OR usesysid = 7016;
usename
---------
allen
vincent
(2 rows)
Eliminando un grupo
Cualquier super usuari o puede tambin elimi nar un grupo con el comando SQL
DROP GROUP. Debera ejecut ar con cuidado ste comando, ya que es irreversi ble, y no
ser interrogado para que verifique la orden de eliminacin del grupo (aunque todava
haya usuari os en el grupo). A diferencia de DROP DATABASE, DROP GROUP puede ser
realizado dent ro de un bloque de transacciones.
Aqu tiene la sint axis de DROP GROUP:
DROP GROUP nombre_grupo
El nombre_grupo es el nombre del grupo que va a ser eliminado permanent ement e.
El Ejemplo siguient e elimina el grupo marketi ng de la base de dat os Book Town.
Ejemplo de la eliminaci on un grupo
booktown=# DROP GROUP marketing;
DROP GROUP
El mensaj e del servidor DROP GROUP retornado en el Ejempl o ant erior indica que
el grupo fue eliminado con xito. Adviert a que la eliminacin de un grupo no elimina
los permi sos asignados al mismo, sino que le libera de los mismos. Cualesqui er
permi sos asignados a un objet o de base de dat os que tiene los permi sos asignados a
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
un grupo eliminado aparecern asignados a un ID de grupo, en vez de a un grupo.
Nota: Los grupos eliminados por error pueden ser restaur ados creando un nuevo
grupo con el mismo ID de sistema que el eliminado. Esto implica a la palabra clave
SYSID, tal como la document amos en la seccin llamada ` ` Cr eando un grupo' ' . Si
ust ed asigna permi sos de grupo a una tabla y luego elimina el grupo, los permi sos del
grupo en la tabla sern mant eni dos. Sin embargo, necesi tar aadi r a los adecuados
usuari os al recient ement e creado grupo para que los permi sos de tabla sean efectivos
para los miembros de ese grupo.
Asociando usuarios con grupos
Los usuari os pueden ser aadi dos y eliminados de los grupos en PostgreSQL a
travs del comando SQL ALTER GROUP. Aqu tiene la sint axis del comando ALTER
GROUP:
ALTER GROUP nombre_grupo { ADD | DROP } USER username [,
... ]
El nombre_grupo es el nombre del grupo a ser modificado, mient ras que
nombre_usuari o es el nombre del usuari o a ser aadi do o eliminado, dependi endo del
uso de las palabras clave ADD o DROP.
Aadiendo un usuario a un grupo
Suponga que Booktown cont rat a a dos nuevos asociados de ventas, David y Ben, y
les asigna los nombres de usuari o david y ben, respectivament e. El Ejemplo 10- 14 que
usa el comando ALTER GROUP aade estos nuevos usuari os al grupo sales.
Ejemplo de aadir un usuario a un grupo
booktown=# ALTER GROUP sales ADD USER david, ben;
ALTER GROUP
El mensaj e del servi dor ALTER GROUP indica que los usuari os david y ben fueron
aadi dos con xito al grupo sales. El Ejemplo ant erior demuest r a otra consul t a a la
tabla pg_group para verificar la adicin de esos nuevos usuari os al grupo. Adviert a
que ahora hay cuat ro IDs de sistema en la columna grolist para el grupo sales .
Ejemplo de Verificar la adicin de usuarios
booktown=# SELECT * FROM pg_group WHERE groname = 'sales';
groname | grosysid | grolist
---------+----------+-----------------------
sales | 1 | {7019,7018,7017,7016}
(1 row)
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Eliminando a un Usuario de un Grupo
Suponga que durant e cierto tiempo el usuari o David es transferi do desde el
depart ament o sales al depart ament o account i ng. En orden a mant ener la correct a
asociacin de grupo, y de asegurarse de que David no tiene privilegios exclusivos en el
grupo sales, su nombre de usuari o (david) deber a ser eliminado del grupo; el Ejemplo
siguient e lo muest ra.
Ejemplo de eliminar a un usuari o de un grupo
booktown=# ALTER GROUP sales DROP USER david;
ALTER GROUP
El mensaj e ALTER GROUP retornado en el Ejemplo anterior indica que el usuario
david fue eliminado con xito del grupo sales.
Para complet ar su transicin al depart ament o account i ng, David debe tener su
nombre de usuari o aadi do al grupo account i ng. Los siguient es estament os usan una
sint axi s similar a la de los estament os de los dos ejempl os del topico. El efecto es que
el usuari o david es aadi do al grupo accounti ng. Esto significa que cualesqui era
privilegios especiales otorgados a este grupo sern implcitament e asignados a david
durant e el tiempo que pert enezca al grupo.
booktown=# ALTER GROUP accounting ADD USER david;
ALTER GROUP
booktown=# SELECT * FROM pg_group;
groname | grosysid | grolist
------------+----------+------------------
sales | 1 | {7016,7017,7019}
accounting | 2 | {7018}
(2 rows)
Otorgando Privilegios
PostgreSQL mant iene un altament e cont rol ado juego de listas de cont rol de acceso,
o ACLs. Esta informaci n describe qu usuarios estn autori zados para realizar
consul t as, actualizaciones, etc. o modificar objet os dent ro de una base de datos.
Existe un juego de privilegios de acceso y de rest ricciones aplicable para cada objeto
de base de datos en PostgreSQL (p.ej., tablas, vistas y secuencias). Los superusuari os y
los propiet ari os de los objetos de bases de dat os mantienen estos ACLs a travs de un
par de comandos SQL: GRANT y REVOKE.
Como se vi en el Capt ul o 9, cuando un usuario crea por pri mera vez una base de
datos, se vuelve implcitament e el propiet ari o de esa base de dat os. Similarment e,
cada vez que alguien crea u objet o de base de datos, este es pose do por el individuo
que ejecut el correspondi ent e comando SQL CREATE.
Adems de los superusuari os de PostgreSQL (que pueden mani pul ar cualquier
objet o de base de dat os de cualquier forma), slo los propiet ari os de los objet os de
base de dat os pueden dar y/ o revocar privilegios sobre los objet os de su propi edad.
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Aunque cualquier usuario pueda conect ar a una base de dat os, si desea acceso a
objet os dent ro de la base de dat os debe tener los correspondi ent es privilegios
explcitament e otorgados.
Comprendiendo el Control de Acceso
Como ya mencionamos antes en esta seccin, las listas de cont rol de acceso se
aplican a tres tipos de objet os de base de dat os: tablas, listas y secuencias. Para estos
objet os, hay cuat ro privilegios generales que pueden ser otorgados, o revocados, a un
usuari o o grupo. Los usuari os y/o grupos no poseen privilegios por defect o.
Desde el client e psql, usted puede ver el sumari o de permi sos de las ACL usando el
comando rpido \ z. Este comando displaya todos los permi sos de acceso sobre la
base de dat os act ual ment e accedi da. Para ver los permi sos de un objeto especfico,
indique el nombre del objeto como parmet r o del comando \ z. Puede usar una
expresi n regular en lugar de un nombre para ver los privilegios de un grupo de
objet os.
La tabla siguient e lista cada uno de los privilegios de cont rol de acceso disponi bles
en PostgreSQL. Cada privilegio tambin tiene un smbol o asociado, el cual aparece
como un carct er alfabtico nico. Estos smbol os son la abreviat ura del privilegio
descri t o, y son usados por el comando \ z de psql cuando se displayan sumari os o
permi sos de acceso.

Privilegi os ACL en PostgreSQL
P.Clave Smbolo Descripcin
SELECT r Permite a un usuario obtener
datos de una tabla, vista o
secuencia (aunque la funcin
netxval() no puede ser
llamada slo con privilegios
SELECT). Tambin conocido
como permisos de lectura.
INSERT a Permite a un usuario insertar
nuevas filas en una tabla.
Tambin conocido como
permisos de adicin.
UPDATE,
DELETE
w Permite a un usuario
modificar o eliminar filas de
datos de una tabla. Si slo
se asigna uno de los
privilegios, el otro es
implcitamente otorgado.
Tambin conocidos como
permisos de escritura.
RULE R Permite a un usuario crear
una regla de reescritura
sobre una tabla o vista.
ALL arwR Representa una forma corta
de garantizar o revocar todos
los permisos de una sola vez.
ALL no es un privilegio en s
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
mismo. Agisnar ALL implica
garantizar los permisos
SELECT, INSERT, UPDATE,
DELETE, y RULE.
Garantizando Privilegios con GRANT
Para asignar un privilegio a un usuario o a un grupo, use el comando SQL GRANT.
Aqu tiene la sintaxis de GRANT:
GRANT privilegio [, ...] ON objecto [, ...]
TO { PUBLIC | nombre_usuario | GROUP nombre_grupo }
En esta sint axis, privilegio es cualquiera de los privilegios listados en la tabla
anteri or, object o es el nombre del objeto de base de datos (tabla, vista o secuencia)
para el que es asignado el privilegio, y el element o que sigue a la palabra clave TO
describe a quin es garanti zado el privilegio. Se pueden indicar mlti ples privilegios y
objet os, separados los unos de los otros mediant e comas.
Slo uno de los trmi nos a conti nuacin de TO pueden ser usados en un nico
est ament o GRANT. El otorgami ent o de privilegios con la palabra clave PUBLIC
indiscri mi nadament e garanti za el privilegio al objetivo especial "public". Los
privilegios PUBLIC son compart i dos por todos los usuari os. Especificar un nombre de
usuari o garanti za el privilegio al usuario especificado. Por el cont rari o, especificar un
nombre de grupo garant i za el privilegio al grupo especificado.
Supongamos, por ejempl o, que el usuari o manager necesit a todos los permi sos
para las tablas cust omer s, books, editions y publisher s. El Ejemplo 10- 17 da al
usuari o manager dichos privilegios, con un nico estament o GRANT.
Ejemplo de otorgar privilegios de usuario.
booktown=# GRANT ALL ON customers, books, editions,
publishers
booktown-# TO manager;
CHANGE
El uso de la palabra clave ALL en el Ejemplo 10- 17 otorga todos los posibles
permi sos ACL (SELECT, UPDATE, etc.) para los objetos especificados al usuari o
manager. El mensaj e CHANGE del servidor indica que los privilegios fueron
modificados con xito. Recuerde que puede usar el comando rpi do \ z en psql para
verificar los permi sos estableci dos sobre un objet o de base de dat os.
booktown=# \z publishers
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Access permissions for database "booktown"
Relation | Access permissions
------------+----------------------
publishers | {"=","manager=arwR"}
(1 row)
Como otro ejempl o, veamos el uso de la palabra clave GROUP para otorgar
privilegios a los miembr os de un grupo. Por ejempl o, todo el depart ament o de ventas
(sales) Book Town debera tener permi sos para ver la tabla cust omer s, pero no para
modificarla. El Ejemplo 10- 18 otorga privilegios SELECT sobre la tabla cust omer s a
cualqui er miembro del grupo sales.
Ejemplo de otorgar privilegios de grupo.
booktown=# GRANT SELECT ON customers TO GROUP sales;
CHANGE
booktown=# \z customers
Access permissions for database "booktown"
Relation | Access permissions
-----------+---------------------------------
customers | {"=","manager=arwR","group sales=r"}
(1 row)
Restringiendo Permisos con REVOKE
Por defect o, un usuario normal no tiene ningn privilegio sobre ningn objet o de la
base de dat os de la cual no es propiet ari o. Para revocar explcitament e un privilegio
que actual ment e est otorgado, el propiet ari o del objeto (o un super usuari o) puede
usar el comando REVOKE. Este comando es muy similar en format o al comando
GRANT.
Aqu tiene su sintaxis:
REVOKE privilege [, ...] ON object [, ...]
FROM { PUBLIC | username | GROUP groupname }
La sintaxis de la estruct ura del comando REVOKE es idntica a la del comando
GRANT, con la excepcin de que el comando SQL es REVOKE en lugar de GRANT, y la
palabra clave FROM es usada, en vez de la palabra clave TO.
Nota: La revocacin de privilegios a PUBLIC slo afecta al grupo especial ` ` publ i c' ' ,
el cual incluye a todos los usuari os. La revocacin de privilegios para PUBLIC no
afectar a ningn usuari o a los que explcitament e se les hayan asignado dichos
privilegios.
Supongamos que los privilegios UPDATE sobre la tabla books han sido otorgados al
usuari o david. Cuando David es transferi do a otro depart ament o, y no necesit a ms la
capaci dad de modificar informaci n en la tabla book, usted debera revocar el
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
privilegio UPDATE de David sobre la tabla de libros.
El Ejemplo siguient e usa el comando rpi do \ z de psql para comprobar los
permi sos sobre la tabla de libros, revelando que david tiene privilegios de escrit ura a
dicha tabla. Un estament o REVOKE explcitament e revoca entonces los privilegios
UPDATE y DELETE sobre la tabla de libros para el usuari o david. Finalment e, otra
ejecucin de \ z es ejecut ada para verificar la revocacin del privilegio.
Ejemplo de revocar privilegios
booktown=# \z books Access permissions for database
"booktown"
Relation | Access permissions
----------+--------------------------------
books | {"=","manager=arwR","david=w"}
(1 row)
booktown=# REVOKE UPDATE, DELETE ON books
booktown-# FROM david;
CHANGE
booktown=# \z books
Access permissions for database "booktown"
Relation | Access permissions
----------+----------------------
books | {"=","manager=arwR"}
(1 row)
Usando Vistas para el Control de Acceso
Aunque usted no puede cont rolar el acceso de lectura a especficas columnas o
filas de uan tabla, puede hacerlo indirect ament e a travs del uso adecuado de vistas.
Mediant e la creacin de una vista sobre una tabla, y forzando a los usuarios a acceder
a la tabla a travs de dicha vista, ust ed puede permi tir el acceso slo a las deseadas
filas o columnas seleccionadas.
Usted limita las columnas especificando una lista de columnas en el estament o
SELECT de la vista cuando usted la crea. La vista slo retornar las columnas que
ust ed especifique. Usted limita las filas escribiendo una clusul a WHERE en el
est ament o SELECT de la vista. La vista ent onces retornar slo aqullas filas que
coinci dan con la clusul a WHERE (vea el Capt ul o 4, para ms informacin sobre crear
vistas).
Como los privilegios ACL pueden ser aplicados tant o a las vistas como a las tablas,
ust ed puede entonces garanti zar privilegios SELECT para la vista limitada, pero no
para la tabla misma. Los usuarios podrn seleccionar desde la vista aunque no
tendrn acceso a la tabla.
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Por ejempl o, La tienda Book Town tiene una tabla de stocks correlacionando un
nmero ISBN de libro con su precio de cost e, precio de venta y stock actual. La
est ruct ura de la tabla se muest ra en la tabla siguient e.
La tabla de stocks
Columna Tipo Modificador
isbn text NOT NULL
cost numeric(5,
2)

retail numeric(5,
2)

stock integer
Suponga que el gerent e de Book Town no desea que el personal del ventas tenga
acceso al coste de cada libro. Esta informacin puede ser rest ri ngi da generando una
vista que retorna slo los datos relativos al isbn, precio de venta y stock existent e. El
Ejemplo 10- 20 crea dicha vista, otorga permi sos al grupo de ventas (sales), y verifica
los privilegios con el comando rpi do \ z de psql.
Ejemplo de Controlar privilegios SELECT con una vista.
booktown=# CREATE VIEW stock_view
booktown-# AS SELECT isbn, retail, stock
booktown-# FROM stock;
CREATE
booktown=# GRANT SELECT ON stock_view TO GROUP sales;
CHANGE
booktown=# \z stock
Access permissions for database "booktown"
Relation | Access permissions
--------------+---------------------------------------
stock |
stock_backup |
stock_view | {"=","manager=arwR","group sales=r"}
(3 rows)
El ejempl o siguient e demuest ra la adicin de un nuevo usuari o, barbara. Esta
garanti za privilegios SELECT sobre la vista stock_view. Como la usuari a barbara no
tiene ningn privilegio implcit o sobre la tabla de stocks, sta es inaccesible; este es el
caso, incluso aunque la vista sobre la tabla es accesible como resul t ado del estament o
GRANT.
Ejemplo de contolar SELECT
booktown=# CREATE USER barbara;
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
CREATE USER
booktown=# GRANT USER barbara SELECT ON stock_view;
booktown=# \c - barbara
You are now connected as new user barbara.
booktown=> SELECT * FROM stock;
ERROR: stock: Permission denied.
booktown=> SELECT * FROM stock_view;
isbn | retail | stock
------------+--------+-------
0385121679 | 36.95 | 65
039480001X | 32.95 | 31
0394900014 | 23.95 | 0
044100590X | 45.95 | 89
0441172717 | 21.95 | 77
0451160916 | 28.95 | 22
0451198492 | 46.95 | 0
0451457994 | 22.95 | 0
0590445065 | 23.95 | 10
0679803335 | 24.95 | 18
0694003611 | 28.95 | 50
0760720002 | 23.95 | 28
0823015505 | 28.95 | 16
0929605942 | 21.95 | 25
1885418035 | 24.95 | 77
0394800753 | 16.95 | 4
(16 rows)
Adviert a que cuando se conect e como el usuari o barbara, el estament o SELECT para la vista
stock_view tiene xito, mient ras que la tabla stock present a un error de Permiso Denegado.
Instalacin en GNU/Linux desde paquetes.
La inst al acin a parti r de de paquet es de una dist ribuci n deter mi nada tiene sus ventaj as e
inconveni ent es:
Ventajas:
Facilidad de implant acin, Los ficheros van a direct ori os predet er mi nados. Es un buen
mt odo para tener instalado PostgreSQL con poco esfuer zo y ponerse a practicar.
Se crea automt i cament e toda la infraest r uct ur a de funcionami ent o, el usuari o del
sistema operativo, los programas de arranque y parada en el init.d, etc.
Crea una inst anci a de base de dat os, clust er.
Incluso en algunas dist ri buci ones , viene como una opcin ms que se puede inst alar.
[root@server01 FCLD]# rpm Uvh post gresql*
[root@server01 FCLD]# yum inst all postgre*
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Una vez inst alado el software estamos en disposicin de empezar a usar este SGBD, pero no
tenemos todava creado ningn clust er de base de dat os.
Creacion del cluster
Ya vimos en un punt o anterior cmo se crea un clust er de base de dat os, por ejempl o, en este
curso, vamos a crear el siguient e clust er:
[root@server01 FCLD]# initdb - - pgdat a=$PGDATA - - encodi ng=LATIN1 locale=es_ES
Con este proceso se han creado tres bases de dat os: templ at e0 (que ya se ha dicho que no se
debe modificar ni debemos conect ar nos a ella ), templ at e1 y post gres.
Al termi nar de crear el clust er nos responde que ya podemos iniciar el post mast er de este clust er
de dos modos:
[root@server01 FCLD]# pg_ctl start
Puesta en marcha y parada del servidor.
La puest a en marcha del servidor se puede h acer de forma manual con dos comandos:
pg_ctl: facilidad para la puest a en marcha, parada y reconfiguraci n del servidor. Hace
uso de la instrucci n que acta sobre el servidor post gres.
post mast er : proceso servidor de base de dat os.
pg_ctl es un programa para iniciar, detener, reiniciar, recargar archivos de configuraci n,
report ar el estado de un servidor PostgreSQL o enviar una seal a un proceso PostgreSQL.
Operaciones:
start: puest a en marcha del servidor
stop: parada del servidor
restart: parada del servidor segui da de puest a en marcha
reload: enva al post mast er una seal SIGHUP, que provoca que recargue toda la informaci n
de configuraci n. Algunas opciones de configuracin requieren parar el servidor.
status: compr ueba si hay un post mast er en marcha y muest ra el PID y sus opciones de puest a
en marcha.
kill, register, unregister: opciones para la versin de Windows para matar, regist rar como
servicio o eliminar el servicio.
Copias de segurid ad de ficheros del SO.
Es el mt odo ms sencillo, pero el ms ineficaz, se trat a de realizar una copia de todos los
ficheros de un clust er, por ejempl o:
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
[root@server01 FCLD]# su post gres
[root@server01 FCLD]# cd / t mp/ backup
[root@server01 FCLD]# tar cvfz copia.t ar.gz $PGDATA
Desventajas de este mtodo:
la base de dat os debe estar parada
Volcado SQL
Los volcados de este tipo se reali zan usando las herrami ent as que nos proporci ona PostgreSQL.
Estos volcados son muy flexibles y de gran utilidad, nos permi ti rn hacer copias de seguri dad de
toda la base de dat os o de part es de ella, y luego, dada una copia de seguri dad, nos permi tirn
rest aurar lo que queramos.
Adems, estas herrami ent as sirven para la transmi si n de datos entre bases de dat os.
Las herrami ent as que se van a utilizar son:
pg_dump: vuelca una base de datos o part e de ella a un fichero, bien en text o plano o en un
format o propi o de PostgreSQL. Se puede recuperar cualquier objet o que est en el fichero
aisladament e. El servidor debe estar en marcha.
pg_dumpall : vuelca un clust er complet o
pg_restore: recupera los objetos volcados en una copia de seguri dad que no se reali zn en texto
plano sino en un format o propi o de PostgreSQL.
psql: se usa para recuperar los volcados en texto plano.
pg_dump
Con este comando, podemos volcar una base de dat os o part e de ella a un fichero script en text o
plano o en un format o propio de PostgreSQL.
Si lo hacemos en un fichero de text o plano:
tendremos un fichero de texto con instrucci ones SQL
podemos usar psql para restaur ar
es port abl e a servidores SQL
Si lo hacemos en un format o propio de PostgreSQL:
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
debemos usar pg_rest ore para rest aur ar
es ms flexible
slo es port abl e ent re servi dores PostgreSQL (aunque esto no es del todo cierto, debi do a
que con pg_rest ore se pueden crear ficheros SQL en texto plano).
Este proceso se debe realizar con el clust er en marcha, pero no bloquea la base de datos (ni
lectores ni escrit ores). Es un sistema anlogo al export de Oracle.
Uso:
pg_dump [OPCIN]... [NOMBREDB]
Opciones generales:
- f, - - file=ARCHIVO nombre del archivo de salida
- F, - - format =c | t | p Format o del archivo de salida
(personali zado, tar, slo texto)
- i, - - ignore- version procede an cuando las versiones del servidor
y pg_dump no coinciden
- v, - - verbose modo verboso
- Z, - - compress =0 - 9 nivel de compresi n para format os compri mi dos
- - help muest ra esta ayuda y termi na
- - version muest ra informacin de la versin y termi na
Opciones que cont rol an el conteni do de la salida:
- a, - - data- only extrae slo los datos, no el esquema
- c, - - clean limpia (tira) el esquema antes de su creacin
- C, - - create incluye comandos para crear la base de datos
en la extraccin
- d, - - insert s extrae los dat os usando INSERT, en vez de COPY
- D, - - column- insert s extrae los datos usando INSERT con nombres
de columnas
- E, - - encodi ng=CODIFIC extrae los datos con la codificacin CODIFIC
- n, - - schema=ESQUEMA extrae slo el esquema nombrado
- o, - - oids incluye OIDs en la extraccin
- O, - - no- owner en format o de slo text o, no reest abl ecer
los dueos de los objet os
- s, - - schema- only extrae slo el esquema, no los dat os
- S, - - super user =NAME especifica el nombre del super usuari o a usar en
el format o de slo text o
- t, - - table=TABLE extrae slo la tabla nombrada
- x, - - no- privileges no extrae los privilegios (grant / r evoke)
- X disable- dollar - quoti ng, - - disable- dollar - quoti ng
deshabilita el uso de delimit adores de dlar
usa delimit adores de cadena estndar es
- X disable- triggers, - - disable- triggers
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
deshabilit a los disparadores (triggers) durant e el
rest abl eci mient o de la extraccin de slo- datos
- X use- set - session- aut hori zat i on, - - use- set - session- aut hori zat i on
usa comandos SESSION AUTHORIZATION en lugar de
comandos OWNER TO
Opciones de la conexin:
- h, - - host =ANFITRIN anfit rin de la base de datos o el
direct orio del enchufe (socket)
- p, - - port =PUERTO nmero del puert o de la base de dat os
- U, - - username =USUARIO nombre de usuari o con el cual conect arse
- W, - - passwor d fuerza un prompt para la cont rasea
(debera ser automt i co)
Uso de INSERT en vez de COPY: - d, - - insert s
COPY es ms rpi do.
INSERT es ms port able.
- - Export ar una base de dat os:
pg_dump f bdnomi nas. sql h otrohost p 6432 bdnomi nas
- - Export ar un esquema, redireccionando la salida
pg_dump n nomi nas2004 > esq_nomi nas2004. sql
- - Volcar una base de dat os llamada mibd en un fichero tar:
[postgres@GNU][~]$ pg_dump - Ft mibd > bd.tar
pg_dumpall
Con pg_dumpall se realizan volcados del clust er compl et o, incluyendo roles de grupo y roles de
login.
Ejemplos de uso:
- - Export ar un clust er:
[postgres@GNU][~]$ pg_dumpall > miclust er. sql
- - Export ar solo los datos
[post gres@GNU][~]$ pg_dumpall a > misdat os. sql
- - Export ar solo los roles / usuari os de una base de dat os en otro servidor
- - que adems, tiene otro superusuari o
[post gres@GNU][~]$ pg_dump_all g h otroservi dor U otrosuper usuari o p 6432 >
misusuari os. sql
- - Export ar solo los esquemas
[post gres@GNU][~]$ pg_dumpall s > misesquemas. sql
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Recupera cin con psql
La recuperacin con psql se puede hacer cuando los ficheros de volcado son texto plano con
sent enci as SQL. Hacemos uso de la posi bilidad que tiene psql de ejecut ar cdigo que le viene
redireccionado de entrada desde un fichero.
[post gres@GNU][~]$ psql [bd_desti no] < fichero.sql
- - crear los usuari os de un clust er en otro, atencin porque en el segundo paso
- - nos conect amos a templ at e1:
[post gres@GNU][~]$ pg_dumpall h origen U postgres g > usuarios_clust er. sql
[post gres@GNU][~]$ psql h desti no p 6432 U spdest i no templ at e1 < usuari os_clust er
- - copiar una base de datos en el otro servidor
[post gres@GNU][~]$ pg_dump h origen U postgres f bdorigen. sql C bdorigen
[post gres@GNU][~]$ psql h desti no p 6432 U spdest i no bddest i no < bdorigen. sql
- - copiar los objet os de una base de dat os en otra (la diferencia con el mt odo
Recuperacin con pg_restore
Con pg_rest ore se pueden rest aurar a partir de ficheros en format o distint o a text o plano (tar o
uno propi o de PostgreSQL compri mi do). Se puede seleccionar y reordenar la seleccin.
[post gres@GNU][~]$ pg_rest ore - Fc - f empleados. sql - t empleados bd.dump
[post gres@GNU][~]$ pgsql bdorigen c drop table empl eados
[post gres@GNU][~]$ psql bdorigen < empleados. sql
Recuperacin ante fallos
Fallos en la memoria principal
PostgreSQL se recupera bien en fallos de la memori a pri mari a (cortes de luz ,cuelgues, etc.), el
sistema se recupera usando los ficheros de log (WAL) y nunca se pierde una transaccin
confirmada.
Los ficheros de log permi t en que adems, la base de datos no tenga que estar complet ament e
actuali zada (sync) para mant ener los dat os ante fallos en la memori a princi pal (prdi da de
valores en los bufferes compar ti dos).
Hay un nmero mxi mo de logs: 2*CHECKPOINT_SEGMENTS+1
Si se llenan sin que se haya hecho sync,el sistema hace un sync y avisa de que hacen falta ms
logs.
El trabaj o y el tiempo de recuperaci n dependen del nmero de checkpoi nt_segment s, cuant o
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
mayor sea el sistema aguant ar ms tiempo sin llevar los bferes sucios a disco y ser ms
eficiente, aunque tambin se requiere ms espacio en disco y las recuperaci ones requeriran ms
tiempo.
Volcado en linea y recuperacin PITR
A parti r de la versin 8.0.0, PostgreSQL permi t e actuali zar la copia de seguri dad con los cambios
que proporci onan en los ficheros de log que hayan sobrevivido.
Para poder utilizar esta opcin tiene que estar habilitado el archivado WAL y en funcionami ent o.
Los ficheros WAL son segment os de 16Mb que se nombran secuencial ment e en el cual el sistema
va copiando los cambios en la base de dat os. El sistema recicla los ficheros de log que no van a
ser necesi tados renombr ndol os a nmeros superi ores dent ro de la secuenci a.
Para activar el archivado, en el fichero post gresql.conf debemos indicar el comando de copia para
preservar los ficheros de log, parmet r o archive_command, haciendo, por ejempl o:
archive_command = cp i %p / mnt / s er ver / ar chivedi r /%f < / dev/ nul l
donde %p represent a el nombre del fichero con la ruta absol ut a y %f sin la rut a.
Para realizar copias de seguri dad en lnea se siguen los siguient es pasos:
1. activar el archivado WAL
2. antes de empezar y desde una consola SQL hay que ejecut ar:
select pg_start_backup(nombre_copi a);
3. con el servidor en marcha, hacemos la copia de sde el sistema operativo, no hace falta
parar el servidor, por ejempl o:
[post gres@GNU][~]$ tar cvf backup_nombr e_copi a. t ar $PGDATA
4. cuando acaba, desde la consol a SQL, marcamos el final, ejecut amos:
select pg_stop_backup();
5. se crea as un fichero de marca en el direct orio $PGDATA/ pg_xlog/ archive_st at us y copia
los logs que se reciclan en donde se haya indicado en archive_command.
Para realizar una recuperacin se siguen los siguientes pasos:
1. parar el post mast er
2. si tenemos espacio, copiar el clust er daado y los tablespaces a otra ubicacin
3. borrar todos los ficheros que hay dent ro del cluster asi como los correspondi ent es a los
tablespaces
4. recuperar la copia de seguri dad (comprobando los tablespaces en pg_tblspc)
[post gres@GNU][~]$ tar xvf backup_nombr e_copi a
5. borrar los ficheros WAL en $PGD ATA/ pg_xlog porque probabl ement e estarn obsolet os.
6. si existen ficheros WAL sin archivar, tal como hemos hecho en el paso 2, copiarlos a
pg_xlog
7. crear un fichero de comandos de recuperaci n, recovery.conf en el direct orio $PGDATA.
Existe una plantilla, recovery.conf.sampl e, en el direct ori o $HOME/ pgsql / s har e. Se copia
con el nombre recovery.conf en $PGDATA y se edita. En princi pi o, si se quiere recuperar
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
todo y los logs estn en su sitio, no hay que tocar nada.
8. se arranca PostgreSQL que entra en modo de recuperaci n y procede a leer la
informacin de los WAL que necesit e, siendo necesario evitar que se conect en usuarios
normal es durant e la recuperaci n.
9. . inspeccionar la base de datos, si todo ha ido correct o, los datos estarn recuperados
hast a la lti ma transaccin confirmada y el fichero recovery.conf se renombra a
recovery. done.
Conviene tener los ficheros log en un disco distint o al que est el cluster, para que la
recuperaci n sea mejor. Para ello, debemos mover el direct ori o pg_xlog a otro disco y crear un
enlace simblico, con el clust er parado, por ejempl o:
[post gres@GNU][~]$ mkdi r / di sco2/ pg/
[post gres@GNU][~]$ cd $PGDATA
[post gres@GNU][~]$ mv pg_xlog / di sco2/ pg
[post gres@GNU][~]$ ln s / di sco2/ pg / pg_xlog pg_xlog
adems, para asegurar nos que no se nos pierden archivos de log, podemos hacer un cron que
copie los archivos que no estn llenos en una ubicacin disti nt a.
En el fichero recovery_conf hay una serie de parmet ros que pueden ayudar a recuperar hast a el
moment o o la transaccin que queramos (lo que se conoce como recuperacin Point - in- time):
rest ore_command: lo que ejecut a esta variable es lo que PostgreSQL ejecut ar antes de
empezar la recuperaci n. Por ejempl o:
restore_command = cp / mnt / s erver / archi vedir/%f %p
recovery_target_ti me: hast a qu moment o
recovery_target_xi d: hast a una transaccin deter mi nada
recovery_target_incl usive: si los dos casos anteriores son inclusive o no.
Monitorizacion
La moni t ori zaci n de la actividad del servidor PostgreSQL se puede hacer con herrami ent as
del SO o con herr amient as propi as de la base de dat os.
Monitorizacin de la actividad en la Base de Datos
Comandos del Sistema Operativo (Linux / Unix)
La monit ori zacin se debe fijar sobre todo en:
o Uso de swap (free, vmst at, etc.)
o Uso del disco (iostat, etc.)
o Monitoreo interactivo (top, ps)
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
Comando psql
La herrami ent a cannica para trabaj ar en modo lnea de comandos con PostgreSQL es psql.
Aqutenemos una herrami ent a compl et a para poder mani pul ar las bases de dat os.
Modo de empleo :
[postgres@GNU][~]$ psql [opciones] [base_dat os]
[postgres@GNU][~]$ psql - l - U post gres
Listado de base de dat os
Nombre | Dueo | Codificacin
- - - - - - - - - - - - +- - - - - - - - - - +- - - - - - - - - - - - - -
FCLD | k1k1 | UTF8
NCF | postgres | UTF8
TCEXan | post gres | UTF8
dbgest or | postgres | UTF8
Metacomandos
\ h para ayuda de comandos SQL
\? para ayuda de metacomandos psql
\g o or termi ne con punt o y coma para ejecut ar una consul t a
\ q para salir
General
\c[onnect] [BASE- DE- DATOS| - [USUARIO]]
conect ar a una nueva base de dat os (actual: post gres)
\cd [DIR] cambiar el direct ori o de trabaj o
\copyright most rar trmi nos de uso y distri bucin de PostgreSQL
\ encodi ng [CODIFICACIN]
most rar o definir codificacin del client e
\ h [NOMBRE] most rar ayuda de sintaxis de comandos SQL,
* para todos los comandos
\ q salir de psql
\ set [NOMBRE [VALOR]]
definir variables internas,
listar todas si no se dan parmet r os
\ ti mi ng most rar tiempo de ejecucin de comandos
(actual ment e desactivado)
\ unset NOMBRE indefinir (eliminar) variable interna
\! [COMANDO] ejecut ar comando en intrpret e de comandos,
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
o iniciar intrpret e interactivo
Bfer de consul t a
\ e [ARCHIVO] editar el bfer de consul t a (o archivo) con editor externo
\g [ARCHIVO] enviar bfer de consul t a al servidor
(y resul t ados a archivo o |comando)
\ p most rar el cont eni do del bfer de consul t a
\ r reiniciar (limpiar) el bfer de consul t a
\w ARCHIVO escribir bfer de consul t a a archivo
Entrada/ Sali da
\ echo [CADENA] escribir cadena a salida estndar
\i ARCHIVO ejecut ar comandos desde archivo
\ o [ARCHIVO] envar resul t ados de consul t as a archivo o |comando
\ qecho [CADENA] escribir cadena a salida de consul t as (ver \ o)
Informaci onal
\ d [NOMBRE] descri bir tabla, ndice, secuencia o vista
\ d{t | i | s | v| S} [PATRN] (+ para obtener ms detalles)
listar tablas / ndi ces / secuenci as / vi st as / t abl as de sistema
\ da [PATRN] listar funciones de agregacin
\ db [PATRN] listar tablespaces (+ para ms detalles)
\ dc [PATRN] listar conversiones
\ dC listar conversiones de tipo (cast s)
\ dd [PATRN] listar coment ari os de objetos
\ dD [PATRN] listar domi ni os
\ df [PATRN] listar funciones (+ para ms det alles)
\ dg [PATRN] listar grupos
\ dn [PATRN] listar esquemas (+ para ms detalles)
\ do [NOMBRE] listar operadores
\ dl listar objetos grandes, lo mismo que \lo_list
\ dp [PATRN] listar privilegios de acceso a tablas, vistas y secuenci as
\ dT [PATRN] listar tipos de dat o (+ para ms detalles)
\ du [PATRN] listar usuari os
\l listar todas las bases de datos (+ para ms det alles)
\ z [PATRN] listar privilegios de acceso a tablas, vistas y secuencias
(lo mismo que \ dp)
Format o
\ a cambiar entre modo de salida alineado y sin alinear
\C [CADENA] definir ttulo de tabla, o indefinir si es vaco
\f [CADENA] most rar o definir separador de campos para
modo de salida sin alinear
\H cambi ar modo de salida HTML (actual ment e desactivado)
\ pset NOMBRE [VALOR]
define opcin de salida de tabla
(NOMBRE := {format | bor der | expanded| fi el dsep| f oot er | nul l |
F F U N D A C I O N U N D A C I O N C C O D I G O O D I G O L L I B R E I B R E W W W W W W . . C O D I G O L I B R E C O D I G O L I B R E . . O R G O R G
numericlocale| recor dsep| t upl es_only| t i t le| t abl eat t r | pager})
\ t most rar slo filas (actual ment e desactivado)
\T [CADENA] definir atribut os HTML de <t abl e>, o indefinir si es vaco
\x cambiar modo expandi do (actual ment e desactivado)
Copy, Objetos Grandes
\copy ... ejecut ar comando SQL COPY con flujo de datos al cliente
\lo_export LOBOID ARCHIVO
\lo_i mpor t ARCHIVO [COMENTARIO]
\lo_unlink LOBOID
\lo_list operaciones con objet os grandes
Programa pgAdmin III
pgAdmi n III es un interfaz de admi ni st racin de la base de dat os PostgreSQL. pgAdmi n III puede
conect arse a cualquier base de dat os PostgreSQL 7.X/ 8.X usando la librera empot r ada nativa
libpq.
Cuando se configura el lado del servidor, es posible conect arse usando claves cifradas o
autent icacin SSL. La interfaz de usuario de pgAdmi n III est traduci da en ms de 20 idiomas.
Realiza acceso nativo a PostgreSQL (no se necesit a la capa ODBC).
El programa est escrit o en C++ y usa la excelent e herrami ent a multi plat afor ma wxWindows, lo
cual puede suponer un problema en algunos entornos como Linux, donde habr dificult ades para
inst al ar esta herrami ent a (por ejempl o, la ver sin 1.4 de pgAdmi n III no se puede instalar en
SUSE 9.0).

S-ar putea să vă placă și