Posgree
Posgree
Posgree
ISO-8859-1 dpkg-reconfigure locales # generar el locale (si en el paso anterior no se pudo) locale-gen es_AR # renombrar directorios originales mv /var/lib/postgresql/8.3/main /var/lib/postgresql/8.3/orig mv /etc/postgresql/8.3/main /etc/postgresql/8.3/orig # crear instancia (initdb - "culster") pg_createcluster 8.3 main --locale=es_AR.ISO-8859-1 /etc/init.d/postgresql-8.3 start # iniciar el servidor Instalacin En Ubuntu disponemos paquetes para varias versiones de PostgreSQL: 7.4, 8.0, 8.1 y 8.2 de modo que instalaremos la ltima versin a no ser que necesitemos alguna an terior. Los paquetes necesarios para una instalacin completa son los de la parte cliente (postgresql-client-8.2) y los de la parte servidora (postgresql-8.2). En un ordenador que usemos como cliente slo necesitamos los paquetes del cliente. T ambin es recomentable instalar un cliente grfico que nos facilitar la interaccin con el servidor. Un cliente grfico recomendable es pgAdmin III, que funciona muy bie n. Si tienes dudas sobre que necesitas, puedes instalar los tres paquetes: $ sudo aptitude install postgresql-8.2 postgresql-client-8.2 pgadmin3 Recuerda desinstalar cualquier versin de postgresql que no necesites para no afectar el r endimiento de tu sistema. Por razones de seguridad estableceremos la nueva contrasea al usuario del sistema creado por PostgreSQL: $ sudo passwd postgres Cambiar los privilegios de acceso al shell del usuario postgres con el siguiente comando: $ sudo vipw Y cambiamos el shell del usuario postgres de "/bin/false" a "/bin/bash". Luego s alimos grabando con escape ":wq". Para verificar si la instalacin fue satisfactor ia accedemos a la shell del servidor de bases de datos: $ sudo su postgres -c "psql template1" Si el acceso ha sido satisfactorio cambiamos la contrasea al usuario predetermina do del servidor de bases de datos: template1=# ALTER USER postgres WITH PASSWORD 'nueva_contrasea'; Te saldr el siguiente mensaje confirmando la operacin: ALTER ROLE Sal de la shell del servidor de bases de datos con el comando \q : template1=# \q [editar] Configuracin [editar]
Permitir conexiones remotas Por motivos de seguridad, la configuracin por defecto no admite conexiones extern as. Para habilitarlas tenemos que editar el fichero /etc/postgresql/8.2/main/pos tgresql.conf. $ sudo gedit /etc/postgresql/8.2/main/postgresql.conf Ahora buscamos las siguientes lneas que se encuentran comentadas: #listen_addresses = 'localhost' Y la substituimos por la siguiente lnea: listen_addresses = '*' Posteriormente buscamos la siguiente lnea y le quitamos la marca de comentario: #password_encryption = on Y nos debe quedar lo siguiente: password_encryption = on Guardamos los cambios y reiniciamos el dominio para que los cambios surjan efect o: $ sudo /etc/init.d/postgresql-8.2 restart [editar] Configurar la lista de acceso La configuracin de la lista de acceso permite decirle a PostgreSQL qu mtodo de aute ntificacin usar y establecer relaciones de confianza para ciertas mquinas y redes. Hay que editar el fichero /etc/postgresql/8.2/main/pg_hba.conf: $ sudo vi /etc/postgresql/8.2/main/pg_hba.conf Al final del archivo se encuentra una lista de acceso predeterminada, ahora, dep endiendo de su necesidad puedes hacer lo siguiente: Si necesita que cualquier usuario se conecte por medio de una direccin IP en esp ecifico, agregue al final la siguiente lnea: host all all 192.168.1.4 255.255.255.0 md5 La direccin IP y la SubMascara de Red son ejemplos, cmbielas por datos del usuario que requiera realizar la conexin . Si necesita que cualquier usuario se conecte por medio de una IP determinada si n importar el password (confiamos en dicha IP), la lnea es: host all all 192.168.1.4 255.255.255.255 trust Si necesita que cualquier usuario (usuario de base de datos autentificndose, cla ro) se conecte por medio de cualquier direccin IP, agregue al final la siguiente lnea: host all all 0.0.0.0 0.0.0.0 md5 Si necesita que un usuario determinado se conecte a una base de datos determina da por medio de una direccin IP en especifico, agregue al final la siguiente lnea: host MyDataBase MyUser 192.168.1.4 255.255.255.0 md5 Guarda los cambios realizados en el archivo y reinicia el demonio para que los cambios surjan efecto: $ sudo /etc/init.d/postgresql-8.2 restart [editar] Gestin de usuarios Los usuarios de PostgreSQL tienen un par de capacidades que definimos en su crea cin. Me explico: un usuario puede o no crear ms usuarios y un usuario puede o no c rear bases de datos. En el ejemplo que puedes ver a continuacin creamos un usuari o que no puede crear ms usuarios (no es un administrador) pero puede crear ms base s de datos. El modificador -P hace que nos pregunte por el password que le asign
aremos al usuario. De otra manera el usuario se crear sin password. $ createuser -A -d -P -h host -U usuario nuevo_usuario Enter password for user "nuevo_usuario": Enter it again: Como acabo de comentar, existen usuario administradores (pueden crear otros usua rios). Como es lgico este comando debe ser ejecutado por un usuario con esa carac terstica. Anlogamente podemos eliminar un usuario de esta forma: $ dropuser -h host -U usuario usuario_borrar [editar] Copia de seguridad Para hacer una copia de seguridad de una base de datos tiene el siguiente comand o: $ pg_dump -h host -U usuario nombre_bd > nombre_bd.sql Para hacer una copia de seguridad de todas las bases de datos PostgreSQL de un s ervidor, usa este escript: #!/bin/bash ## BEGIN CONFIG ## HOST=localhost BACKUP_DIR=tmp ## END CONFIG ## if [ ! -d $BACKUP_DIR ]; then mkdir -p $BACKUP_DIR fi POSTGRE_DBS=$(psql -h $HOST -U postgres -l awk ' (NR > 2) && (/[a-zA-Z0-9]+[ ]+[ ]/) && ( $0 !~ /template[0-9]/) { print $1 }'); for DB in $POSTGRE_DBS ; do echo "* Backuping PostgreSQL data from $DB@$HOST..." pg_dump -h $HOST -U postgres $DB > $BACKUP_DIR/pg_$DB.sql done Para restaurar una copia de seguridad: psql -d nombre_base_datos -f archivo.pgdump Install PostGIS Still from the terminal, type: sudo apt-get install postgresql-8.2-postgis PostGIS (1.2.1) will now be installed, to be precise this 2 packages are install ed: PostgreSQL-8.2-PostGIS postgis under file:///usr/share/doc/postgis/postgis.html you will find the PostGIS Manua l, for more help about installation and configuration. -3- Create a PostGIS database template Creating a PostGIS database template is the way to go if you want to make it eas y the creations of many GIS database on the same server. Without creating this t emplate, you would need to repeat this steps every time you need to create a Pos
tGIS database. sudo su postgres createdb postgistemplate createlang plpgsql postgistemplate psql -d postgistemplate -f /usr/share/postgresql-8.2-postgis/lwpostgis.sql psql -d postgistemplate -f /usr/share/postgresql-8.2-postgis/spatial_ref_sys.sql The template is now ready (a lot of functions and two tables - geometry_columns and spatial_ref_sys - were created in it). Now we can test of postgistemplate we just created: $ psql -d postgistemplate -c "SELECT postgis_full_version();" postgis_full_version --------------------------------------------------------------------------------POSTGIS="1.2.1" GEOS="2.2.3-CAPI-1.1.1" PROJ="Rel. 4.5.0, 22 Oct 2006" USE_STAT S (1 row) -4- Create group role and user Generally the best way is to create the GIS data in the PostGIS database by usin g a different role and user than using the Postgres one, that should be used onl y for administrative tasks. Typically I use to create a GIS role and user for ma naging data in the PostGIS database. You can even create more GIS users with dif ferent rights (SELECT, INSERT, UPDATE, DELETE on the different GIS feature class es), to generate a more safe environment. This depends on the configuration of y our GIS scenario. Connect to postgres (with postgres user): psql and enter in the command prompt: type this to create the group role, that here i name gisgroup (choose less permi ssions if needed for security reasons): CREATE ROLE gisgroup NOSUPERUSER NOINHERIT CREATEDB NOCREATEROLE; type this to create the login role, here named GIS (feel free to change it): CREATE ROLE gis LOGIN PASSWORD 'mypassword' NOINHERIT; assign the gis login role to the gisgroup group role: GRANT gisgroup TO gis; -5- Assign permissions We need to assign permissions for the postgistemplate tables (geometry_columns a nd spatial_ref_sys will be owned from the gis user): exit from the previous connection (type q), and connect to the postgistemplate d atabase as the postgres user: psql -d postgistemplate assign the permissions: ALTER TABLE geometry_columns OWNER TO gis; ALTER TABLE spatial_ref_sys OWNER TO gis; Create a schema for your gis data (we shouldn't create the gis data in the publi c schema): CREATE SCHEMA gis_schema AUTHORIZATION gis; exit from the connection (q)
-6- Database creation Now we are ready to create the database (or more databases) where to load the da ta (named gisdb), using the createdb command, from the postgistemplate we just h ave created: $ createdb -T postgistemplate -O gis gisdb -7- Data loading Download this test data: there are 4 shapefiles that we will load in the new Pos tGIS database we have created. We can import shapefiles in PostGIS with the shp2 pgsql command. First we will create the sql files with this command, and then we will run this files with Postgres to import the data in PostGIS. To create the sql files (if you want to avoid this step, the zip file already co ntains this *.sql files we are generating): $ shp2pgsql -I -s 32633 POI.shp gis_schema.poi > poi.sql Shapefile type: Point Postgis type: POINT[2] $ shp2pgsql -I -s 32633 vestizioni.shp gis_schema.vestizioni > vestizioni.sql Shapefile type: Arc Postgis type: MULTILINESTRING[2] $ shp2pgsql -I -s 32633 compfun.shp gis_schema.compfun > compfun.sql Shapefile type: Polygon Postgis type: MULTIPOLYGON[2] $ shp2pgsql -I -s 32633 zone.shp gis_schema.zone > zone.sql Shapefile type: Polygon Postgis type: MULTIPOLYGON[2] Note that we used 2 options of the shp2pgsql: -I will also create a GiST index o n the geometry column -s will give to PostGIS the information of the srid of the data (srid=32633 is for gis data with a spatial reference WGS84, UTM 33 N) Now it is time to execute the *.sql scripts with the gis user: $ psql -d gisdb -h localhost -U gis -f poi.sql BEGIN psql:poi.sql:4: NOTICE: CREATE TABLE will create implicit sequence "poi_gid_seq " for serial column "poi.gid" psql:poi.sql:4: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index " poi_pkey" for table "poi" CREATE TABLE addgeometrycolumn -----------------------------------------------------gis_schema.poi.the_geom SRID:32633 TYPE:POINT DIMS:2 (1 row) CREATE INDEX COMMIT Do the $ psql $ psql $ psql same with the other 3 -d gisdb -h localhost -d gisdb -h localhost -d gisdb -h localhost sqls generated from the previous step: -U gis -f compfun.sql -U gis -f vestizioni.sql -U gis -f zone.sql