Instal.lació i configuració de Postgres

De Wikijoan
Dreceres ràpides: navegació, cerca

Contingut

Instal.lació

apt-get install postgresql-8.1

Configuració

Un cop instal.lat el Postgres hem d'accedir al compte postgres del SO. Com que l'usuari postgres per defecte no té password (no està habilitat, igual que root), només podem fer su postgres si som root (sudo bash) o com a superusuaris (sudo).

joan$ sudo bash # OK Sudo es un comando que permite otorgarle a un usuario normal (no privilegiado) los derechos suficientes para ejecutar ya sea comandos privilegiados o en general para ejecutar programas bajo la identidad de usuario (privilegiado o no) del sistema. 
root$ su postgres #OK
postgres$ psql
postgres => \q
postgres$

també hauríem pogut fer sudo su postgres, i ens demana el password de joan. No cal passar per root

Fixar-se que per connectar-nos com a postgres primer hem hagut de ser root.

Postgres és un usuari, i per defecte també és grup (tots els usuaris per defecte tenen un grup igual que el username). Incloc com a membres del gru postgres els usuaris root i joan.

Una possibilitat per no fer totes aquestes martingales és ficar un password a l'usuari postgres:

 $ sudo passwd postgres

i aleshores ja podem fer su postgres sense haver de passar per el root o el super-admin (sudo)

Hem pogut connectar-nos a Postgres amb l'opció més senzilla: psql. Per defecte vol connectar-se a la base de dades postgres amb el usuari de Postgres postgres. Com que existeixen, la comanda psql sola funciona. Ara bé, la forma més general és

$ psql -h localhost -p 5432 -U postgres -d postgres
postgres=>

on especifico la base de dades a la que vull connectar-me i l'usuari (de Postgres) amb el que vull connectar-me.

La comanda su s'utilitza per tal que un usuari pugui connectar-se temporalment com un altre usuari. Ara bé, en el nostre cas, com que l'usuari postgres no existeix, su postgres significa que volem que l'usuari joan agafi el rol de l'usuari postgres. Però per fer-ho ho he de fer com a super-admin. Per tant:

joan# sudo su postgres 
postgres#

Per assignar un password a l'usuari postgres (en el procés d'instal.lació es crea l'usuari postgres sense password)

postgres=> ALTER USER postgres WITH ENCRYPTED PASSWORD 'secret';

o ens connectem a la bd postgres (que existeix per defecte)

$ psql -h localhost -p 5432 -U postgres -d postgres

podem crear una base de dades (compte amb el charset que utilitzem)

CREATE DATABASE gugel encoding='LATIN1';
$ psql -h localhost -p 5432 -U postgres -d gugel

creació d'usuaris

Si volem connectar-nos amb un altre usuari que no sigui el postgres, l'haurem de crear (respondre que sí a tot) i assignar-li un pwd. Hi ha dues maneres de fer, que són equivalents:

joan@ubuntu:~$ sudo bash
root@ubuntu:~# su postgres
postgres@ubuntu:/home/joan$ createuser pere5
Shall the new role be a superuser? (y/n) y
CREATE ROLE
$ psql -h localhost -p 5432 -U postgres -d postgres
postgres# ALTER USER pere5 WITH ENCRYPTED PASSWORD 'pere5';
ALTER ROLE

fixem-nos que per connectar-nos a postgres ho he de fer des de root, perquè no té password assignat

$ psql -h localhost -p 5432 -U postgres -d postgres
postgres=> CREATE USER pere6;
ROLE CREATED
postgres=> ALTER USER pere6 WITH ENCRYPTED PASSWORD 'pere6';
ALTER ROLE

També es podia fer:

postgres=> CREATE USER pere6 WITH ENCRYPTED PASSWORD 'pere6';

aquests usuaris són usuaris de postgres (ROLE CREATED), no del SO

i ara ja puc connectar-me a un d'aquests usuaris:

$ psql -h localhost -p 5432 -U pere6
$ #error! es pensa que em vull connectar a una bd que es diu pere6, que no existeix (és recomanable utilitzar l'opció -d)
$ psql -h localhost -p 5432 -U pere6 postgres
postgres=>

Configurar els arxius pg_hba.conf i postgresql.conf

els fitxers es troben dins de /etc/postgresql/8.2/main

#port = 5432
listen_addresses = '*'

si hi ha problemes hem de donar permisos sobre l'arxiu (chmod a+rw pg_hba.conf).

a+rw vol dir donar els permisos de lectura i escriputra a tothom (a: user, group, root)

# All IPv4 connections from localhost

host all all 0.0.0.0 0.0.0.0 password

i reiniciem el servei:

joan@ubuntu:/etc/init.d$ sudo ./postgresql-8.2 restart

Accedir des de la xarxa

des de l'equip remot accedim a la bd del servidor:

$ psql -h 192.168.1.130 postgres
postgres=> \c gugel
gugel#

Des de la línia de comandes del postgres també podem canviar la connexió

postgres=> \c  postgres pere6 localhost 5432
You are now connected to database "postgres".

o bé

postgres=> \c  postgres pere6 192.168.1.130 5432

També:

# GRANT ALL PRIVILEGES ON DATABASE yourdatabase TO youruser;

Començar a treballar

postgres => CREATE DATABASE socrathos WITH ENCODING='LATIN1' OWNER=socrathos;
postgres => 
grant all privileges on database socrathos to socrathos;

Anem a executar el script de creació de les taules:

fico el script creacio_taules.txt a /home/joan/Documents

em connecto a la base de dades socrathos:

postgres =>\c socrathos socrathos localhost 5432
socrathos=>

Des de la línia de comandes de la base de dades socrathos

socrathos=> \i /home/joan/Documents/creacio_taules.sql

i funciona!!

Instal.lació des de les fonts (versió 8.4.7)

Em descarrego el fitxer postgresql-8.4.7.tar.gz, tot i que ja hi ha disponible la versió 9 (febrer 2011). Descomprimeixo i llegeixo el fitxer INTALL. Segueixo les instruccions curtes.

./configure
gmake
su
gmake install //he utilitzat make i també ha funcionat
adduser postgres
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data > /home/joan/logs_postgreslogfile 2>&1 & //l'usuari postgres ha de tenir permisos en la carpeta per escriure el logfile. Amb aquesta instrucció arrenca pròpiament la base de dades. És l'equivalent a /etc/init.d/postgresql start, que executaria la sentència anterior
-
/usr/local/pgsql/bin/createdb test //encara no existia cap base de dades. En creo una
/usr/local/pgsql/bin/psql test

test#

En el configure m'ha demanat un parell de llibreries que he hagut d'instal.lar (seguint el procés habitual, es busca la llibreria pel synaptic si no sé segur com es diu, i s'ha d'instal.lar el paquet -dev).

Compilo amb make en comptes de gmake, i funciona. Un cop acabada la instal.lació falta la configuració:

1. crear l'usuari postgres: adduser postgres

2. crear el directori per les dades ($ mkdir /usr/local/pgsql/data) i fer que el propietari sigui l'usuari postgres ($ chown postgres /usr/local/pgsql/data)

3. /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

INITDB(1)               PostgreSQL Server Applications               INITDB(1)

NAME
       initdb - create a new PostgreSQL database cluster

SYNOPSIS
       initdb [ option... ]   [ --pgdata  ]  [ -D  ] directory

DESCRIPTION
       initdb creates a new PostgreSQL database cluster. A database cluster is
       a collection of databases that are managed by a single server instance.

4. /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data > /home/joan/logs_postgres/logfile 2>&1. Ara el que faig és arrencar la base de dades dient en quin directori tinc el cluster. No he d'esperar arrencar mitjançant /etc/init.d/postgres start, perquè això ho fa el paquet debian (quan debianitzem la instal.lació del postgres). Aquest és el mètode general Linux, independent de la distribució.

5. Creo una base de dades (encara no n'existeix cap): /usr/local/pgsql/bin/createdb test

6. Ja puc entrar: /usr/local/pgsql/bin/psql test

A partir d'aquí puc fer altres coses, com donar permisos a l'usuari joan per arrencar Postgres, ficar el binari psql en el $PATH, donar un password a l'usuari postgres, crear la base de dades postgres p d'altres, tocar els fitxers postgresql.conf i pg_hba.conf per permetre connexions des de màquines que no siguin localhost, etc.


creat per Joan Quintana Compte, octubre 2008, febrer 2011

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
IES Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines