Instalação de PostgreSQL 8.4 em Ubuntu 9.10
fontehttp://ubuntuforums.org/showthread.php?t=1308975
http://skyl.org/log/post/skyl/2009/12/running-postgresql-84-on-ubuntu-karmic-koala-with-postgis-141-geodjango/
http://www.quanative.com/category/postgis/
http://biodivertido.blogspot.com/2009/10/install-postgresql-84-and-postgis-140.html
instalação de PostgreSQLsudo apt-get install postgresql-8.4 postgresql-server-dev-8.4 postgresql-contrib-8.4 pgadmin3 pgadmin3-data unixodbc-bin odbc-postgresql r-cran-rodbcinstalação de outros pacotes necessarios# antes de instalar postgis sao necessarios os seguintes pacotes
sudo apt-get install proj-bin libproj-dev gdal-bin
instalação de Postgiswget http://postgis.refractions.net/download/postgis-1.4.0.tar.gz
tar xvfz postgis-1.4.0.tar.gz
cd postgis-1.4.0
./configure
make
sudo make install
mudar a senha do usuário postgres no gestor de base de dadossudo su postgres -c psql template1ALTER USER postgres WITH PASSWORD 'senha'; # com as ' e ; no final\q # para sairmudar a senha do usuário postgres no sistema linux sudo passwd postgres # em seguida pedirá a senhacriar outro utilizadorsu postgrespsql
-d postgres -c "CREATE ROLE
utilizador LOGIN PASSWORD 'senha' SUPERUSER INHERIT CREATEDB CREATEROLE;"
# crear um novo utilizadorou
createuser --createdb --superuser utilizador # o mesmo que usamos no sistema linuxmelhora a conectividade com pgadminsu postgres
psql -f /usr/share/postgresql/8.4/contrib/adminpack.sqlcriar base de dados PostGISsu postgrescreatedb -U postgres postgis # cria uma base de dados modelo com o nome postgiscreatelang -U postgres plpgsql postgis # cria a linguagem plpgsql para a base de dadospsql -U postgres -d postgis -f /usr/share/postgresql/8.4/contrib/postgis.sql # scriptpsql -U postgres -d postgis -f /usr/share/postgresql/8.4/contrib/spatial_ref_sys.sql # scriptpsql -d postgres -c "UPDATE pg_database SET datistemplate='true' WHERE datname='template_postgis';" # definir esta base de dados como modelo (template)
createdb -U postgres -T postgis casa # cria a base de dados casaexecuta um ficheiro.sql na base de dados casasu postgres
psql -U postgres -f /pasta/ficheiro.sql -d casa
permitir ligaçoes externassudo gedit /etc/postgresql/8.4/main/postgresql.conf#listen_addresses = 'localhost' -> listen_addresses = '*'
#password_encryption = on -> password_encryption = on
#autovacuum = on -> autovacuum = on
sudo gedit /etc/postgresql/8.4/main/pg_hba.confadicionar estas duas linhas no final do documento
host all all 193.144.100.254 255.255.255.0 trust
host all all 0.0.0.0 0.0.0.0 md5Começarsu postgrespsql -U postgres # e em seguida introduzir senha de root do sistemaRegras de nomenclatura
fontebase de dadosexemplo: bd_base_de_dados
schemaexemplo: sch_schema
tabelaexemplo: tb_tabela
viewsexemplo: vw_views
sequence<nome da tabela (com prefixo)>_<nome da coluna>_<seq>
exemplo: tb_cliente_id_cliente_seq
primary keyexemplo: pk_<nome_tabela_sem_prefixo>
foreign key fk_<nomeTabelaFilha_sem_prefixo>_<nomeTabelaPai_sem_prefixo>
exemplo: fk_processoeleitoral_eleicao
indexidx_nome_da_coluna_indexada
functionfun_<nome tabela (com prefixo tb_)>_<XXX> ou fun_<nome da função>
XXX - indica a ação realizada pela função (INSert ; DELete ; UPDate ; SELect )
exemplo: fun_tb_cliente_ins, fun_valida_cadastro
stored proceduresstp_<nome tabela (com prefixo tb_)>_<XXX> ou stp_<xxxxxxxxx>
exemplo: stp_tb_municipio_upd, stp_gera_codigo_liberacao
triggertrg_<nome tabela(com prefixo tb_)>_<XXX>
exemplo: trg_tb_comarca_ins_del
Exemplos SQL
select
select t1.campo2 , t2.campo2 from tabela1 t1, tabela2 t2 where t1.campo1 = t2.campo1 and t2.campo3 = 0;
seleccionar parte de uma dataselect extract(year from data) as ano from tabela;
select extract(month from data) as ano from tabela;
select extract(day from data) as ano from tabela;
crear tabela igual a outra pré-existente
CREATE TABLE backup.t_cliente (LIKE t_cliente INCLUDING DEFAULTS INCLUDING INDEXES INCLUDING CONSTRAINTS);
copiar uma tabela de um esquema para outroCREATE TABLE outro_esquema.foobar AS SELECT * FROM um_esquema.foobar;
inserir dadosINSERT INTO films (code, title, did, date_prod, kind) VALUES ('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama');
INSERT INTO tabela1 (Col1, Col2, Col3) SELECT Col1, Col2, Col3 FROM tabela2;
INSERT INTO LocalTable (Col1, Col2, Col3) (SELECT Col1, Col2, Col3 FROM [LinkedServer].DatabaseName.DBO.TableName);
pg_dump -d db1 -t table1 | psql db2 insert into table2 (select * from table1);
inserir dados para uma nova tabelaSELECT * INTO nova_tabela FROM tabela_actual;
apagar dadosdelete from tabela where campo = 'blah';
actualizar dadosupdate tabela1 set campo2 = ('prefixo'||tabela2.campo2) from tabela2 where tabela2.campo3=0 and tabela1.campo1 = tabela2.campo1 ;
importar dados de um ficheiro csvcopy tabela_destino from '/home/user/ficheiro.csv' using delimiters ',' with null as 'NULL';
exportar os resultados de uma consulta para um ficheiro csvcopy (select * from tabela) to '//unidadepc/pasta/ficheiro.csv' csv header;
# a pasta tem de ter previlégios de escrita
mudar o nome de uma base de dadosALTER DATABASE name RENAME TO newname
mudar o nome de uma tabelaalter table tabela01 rename to tabela02;
mudar o nome de um campoALTER TABLE tabela RENAME campo1 TO campo2;
adicionar um campoALTER TABLE Empleados ADD COLUMN Salario CURRENCY;
eliminar um campoALTER TABLE Empleados DROP COLUMN Salario;
mudar o tipo de um campoALTER TABLE tabela ALTER COLUMN campo TYPE varchar(80);
adicionar um comentario a um campoCOMMENT ON COLUMN esquema.tabela.campo IS 'comentario....';
campo unico, sem repetidos ALTER TABLE tabela ADD UNIQUE (campo);
criar indexCREATE INDEX title_idx ON films (title);
apagar indiceALTER TABLE tabela DROP INDEX campo;
adicionar constraintALTER TABLE Pedidos ADD CONSTRAINT RelacionPedidos FOREIGN KEY (IdEmpleado) REFERENCES Empleados (IdEmpleado);
eliminar constraintALTER TABLE Pedidos DROP CONSTRAINT RelacionPedidos;
executar uma consulta desde a terminalpsql -U utilizador -d base_dados -c "sentencia sql"
dumppg_dump -U usuario -h ip_servidor -d banco > banco.sql
seleccionar tabelas onde determinado utilizador tem determinado privilegioSELECT table_schema,table_name FROM information_schema.role_table_grants WHERE grantee = 'utilizador' AND privilege_type = 'privilegio' order by table_schema,table_name;
seleccionar colunas da base de dados sem comentáriosSELECT pg_class.relname FROM pg_namespace JOIN pg_class ON pg_namespace.oid=pg_class.
relnamespace WHERE pg_namespace.nspname IN ('public') AND pg_class.relkind='r' AND pg_class.oid NOT IN (SELECT objoid FROM pg_description);
função e disparadorcreate or replace function nome_funcao() returns trigger as '
begin
NEW.campo_0 = NEW.campo_1 + NEW.campo_2;
return NEW;
end;
' language plpgsql;
create trigger nome_disparador before insert or update on nome_tabela
for each row execute procedure nome_funcion();
condiçaoSELECT a, CASE WHEN a=1 THEN 'one' WHEN a=2 THEN 'two' ELSE 'other' END FROM test;
cross tableIn a simple data model of timeseries, we have a table with fields v (for
variable), t (for time) and y (the data value). v,t is the primary key.
So instead of a table:
t v y
---------------
1 a 0.5
1 b 1.1
1 c 5.1
2 a 0.6
2 b 1.2
2 c 5.2
3 a 0.7
3 b 1.4
3 c 5.5
we would like a table:
t ya yb yc
---------------------
1 0.5 1.1 5.1
2 0.6 1.2 5.2
3 0.7 1.4 5.5
select t, min(case when v = a then y else null end) as ya,
min(case when v = b then y else null end) as yb,
min(case when v = c then y else null end) as yc
from thetable
group by t;
seleccionar schemas, tabelas e comentarios das tabelasselect nspname,relname,description
from pg_description
inner join pg_class on (objoid=oid)
inner join pg_namespace on (oid=relnamespace);
copiar tabela entre esquemaspg_dump -n nome_do_esquema -d nome_do_banco -U usuario -f arquivo_de_backup
Se você está fazendo dump do esquema public aparecerá uma linha como a que esta abaixo no arquivo de backup:
SET search_path = public, pg_catalog;
Modifique esta linha para:
SET search_path = seu_esquema e depois faça:
psql -d nome_do_banco -U usuario -f arquivo_de_backup
PostGIS
criar tabela e adicionar dados geometricos de pontos
CREATE TABLE ciudades (gid serial primary key, nombre varchar(10), poblacion integer);
SELECT addgeometrycolumn ('esquema', 'ciudades', 'geom', 23030, 'POINT', 2);
# adiciona a estructura da tabela recem criada à tabela geometry_columns INSERT INTO ciudades (nombre, poblacion, geom) VALUES('Porto', 319999, geometryfromtext('POINT(700000 450000)', 23030));
ou mais manualmente create table aldeas (gid serial primary key, nombre varchar(10), poblacion integer);
alter table aldeas add column geom geometry;
alter table aldeas add constraint enforce_dims_geom_aldeas check (ndims(geom)=2);
alter table aldeas add constraint enforce_dims_geom_aldeas2 check (srid(geom)=23030);
alter table aldeas add constraint enforce_dims_geom_aldeas3 check (geometrytype(geom)='POINT' OR geom is null);
ver o que fizemos
SELECT * FROM ciudades;
SELECT astext(geom) FROM ciudades;
SELECT asewkt(geom) FROM ciudades;
apagar tabela
select DropGeometryColumn('esquema','ciudades','geom');
drop table ciudades;
mudar o nome de uma tabela/temaupdate geometry_columns set f_table_name = 'nome_novo' where f_table_name = 'nome_antigo';
alter table nome_antigo rename to nome_novo;
criar tabela e adicionar dados geometricos de linhas create table carreteras (gid serial primary key, nombre varchar(10));
select addgeometrycolumn ('', 'carreteras', 'geometria', 23030, 'LINESTRING', 2);
insert into carreteras (nombre, geometria) values('A1', geometryfromtext('LINESTRING(750000 850000, 750000 950000, 850000 650000)', 23030));
obter as coordenadas num sistema diferenteUPDATE tabela SET
campo_lat = st_x(st_transform((geom), 4258)),
campo_lon = st_y(st_transform((geom), 4258));
criar uma vista num sistema de coordenadas diferentecreate view pt_ct_lim_admin_pais_lin_20791 as select gid, st_transform(geom, 20791) from pt_ct_lim_admin_pais_lin;
create view pt_ct_lim_admin_pais_lin_20790 as select gid, st_transform(geom, 20790) from pt_ct_lim_admin_pais_lin;
apagar vistadrop view pt_ct_lim_admin_pais_lin_20791;
event layer de uma tabela de PostgreSQL con campos XYalter table nome_da_tabela add column id serial primary key;
# se já não tem um primary keyselect AddGeometryColumn( 'public', 'nome_da_tabela', 'geom', 23030, 'POINT', 2 );
update nome_da_tabela set geom = setsrid(MakePoint(campo_com_x, campo_com_y), 23030);
exportar de PostgreSQL a shapepgsql2shp -u postgres -P senha basedados tabela -f shape.shp
calcular área (m2)alter table nome_da_tabela add column area_m2 bigint;
update nome_da_tabela set area_m2 = st_area(geom);
ou
update nome_da_tabela set area_m2 = st_area(transform(geom, 23030));
create table nome_da_tabela0 (gid serial PRIMARY KEY, campo1 varchar(80), campo2 smallint);
select addgeometrycolumn ('schema', 'nome_da_tabela ', 'geom', 23030, 'MULTIPOLYGON', 2);
insert into nome_da_tabela0(geom, campo1, campo2)
select multi(intersection(a.geom, b.geom)), a.campo1, b.campo2
from nome_da_tabela1 a, nome_da_tabela2 b
where (a.geom && b.geom) and intersects (a.geom, b.geom);
dissolve
select st_union(geom) as geom, campo1, max(campo2) as campo2, sum(campo3) as campo3 into nome_da_tabela from outra_tabela group by campo1;
alter table nome_da_tabela add column gid serial primary key;
INSERT INTO geometry_columns(f_table_catalog, f_table_schema, f_table_name, f_geometry_column, coord_dimension, srid, type) VALUES ('"', 'schema', 'nome_da_tabela', 'geom', 2, 23030, 'MULTIPOLYGON');
grant select
GRANT SELECT ON TABLE schema.nome_da_tabela TO role;
Importar shape a PostgreSQL
su postgres
shp2pgsql -s 23030 -g geom -W iso-8859-1 -D -I /pasta/shape.shp novatabela basedados | psql basedados
# -s 23030->ED50 UTM 30N; -s->nome do campo dom a geometria; -W iso-8859-1->codificacao latin1?; -D fonte de dados(shp).Importar shape a PostgreSQL com passo intermedio shp2pgsql -s 23030 -W iso-8859-1 -D /pasta/shape.shp novatabela basedados > /pasta/ficheiro.sql
# Cria ficheiro sql; -s 23030->ED50 UTM 30N; -W iso-8859-1->codificacao latin1?; -D fonte de dados(shp). psql -U postgres -d basedados -f /pasta/ficheiro.sql # Faz o insert dos dados do ficheiro sql à base de dados
Ver o que acabamos de importar psql basedados
# entrar na base de dados SELECT * FROM novatabela;
# ver a tabela que contem SELECT * FROM geometry_columns;
# ver todas as tabelas (capas/temas) que temos
Introduzir massivamenta shp's na base de dados
Criar usuário createuser -P -s -e novousuario
# este novo usuario tem de ser igual ao usuario do sistema, ex.: se entraste em Ubuntu com o usuário joaquim o novo usuario PostgreSQL tem de ser joaquim. -P para defenir a senha; -s para que seja super usuario.Script em Python Guardar o seguinte código num ficheiro.py, editar a última linha (a vermelho) com a pasta por onde deve começar a procura recursivamente (sub pastas) todos os
shapes que encontre.
Mudar também e o código EPSG "20791", que corresponde ao Sistema de Coordenadas do
shape (Lisbon (Lisbon)/Portuguese Grid), para o valor que lhe corresponda (
mais códigos EPSG). A melhor solução será agrupar os shapes por Sistemas de Coordenadas em diferentes pastas e executar o script para cada uma das pastas/Sistemas de Coordenadas.
Após a importação a PostgreSQL é criado um index pelo campo de geometria (geom) para acelarar as análises espaciáis e um Vacuum analyze.
________________________________________________________________________________
# só tens que editar o que está a vermelho 'path', 'codigo EPSG'#coding: latin-1
import os
import datetime
def shp2postgis(inicio, epsg):
principio = datetime.datetime.today()
conta = 0
l = os.walk(inicio)
for i in l:
directorio, subdirectorios, ficheros = i
for f in ficheros:
nome_completo = os.path.join(directorio, f)
tabela = f.split('.')[0]
extensao = f.split('.')[-1]
try:
if extensao == 'shp':
os.system('shp2pgsql -s %s -g geom -W iso-8859-1 -D -I %s %s bdg | psql bdg' % (epsg, nome_completo, tabela))
os.system("psql -d bdg -c 'VACUUM ANALYZE %s(geom);'" % tabela)
conta += 1
except:
pass
print conta, 'shp`s importados em', datetime.datetime.today() - principio
shp2postgis('/cartografia/shp/20791/','20791')
shp2postgis('/cartografia/shp/23030/','23030')
________________________________________________________________________________
Passar uma tabela 2d a 3d
select addgeometrycolumn('', 'centrales', 'geom3d', 23030, 'POINT',3);
# adicionar o campo para gemetria 3d update centrales set geom3d = translate(force_3d(geom),0,0,1000);
# adicionar o valor de altitude, neste caso 1000 m (depende do sistema de referencia)
Criar um disparador
createlang -U postgres plpgsql -d ej6
# cria a linguagem de promaçãoGuardar as seguintes sentencias num ficheiro, por exemplo: /home/alumno/Desktop/dispara.sql CREATE OR REPLACE FUNCTION
disparador1() RETURNS trigger AS $
BEGIN
NEW.c3=NEW.c1+NEW.c2;
RETURN NEW;
END;
$ LANGUAGE plpgsql;
CREATE TRIGGER tgg_insert
BEFORE INSERT ON tabela1
FOR EACH ROW EXECUTE PROCEDURE disparador1();
sudo psql -U postgres
# iniciamos psql \i /home/alumno/Desktop/dispara.sql
# integra o disparador na base de dados
Criar uma tabela de eventos com gatilhos
create table capaxy (gid serial primary key, x double precision, y double precision);
select addgeometrycolumn ('','capaxy','geom',-1,'POINT',2);
BEGIN TRANSACTION;
CREATE OR REPLACE FUNCTION tggFunction_updateEventos() RETURNS trigger AS
$$
BEGIN
IF ((NEW.x != OLD.x) OR (NEW.y != OLD.y)) THEN
NEW.geom = ST_MAKEPOINT (NEW.x, NEW.y);
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER tggUpdateEventos
BEFORE UPDATE ON capaxy
FOR EACH ROW EXECUTE PROCEDURE tggFunction_updateEventos();
END TRANSACTION;
INSERT INTO capaxy (x,y,geom) values (10,20,null);
INSERT INTO capaxy (x,y,geom) values (11,21,null);
select gid,x,y,astext(geom) from capaxy;
gid | x | y | astext
-----+----+----+--------
3 | 10 | 20 |
4 | 11 | 21 |
(2 rows)
update capaxy set gid=gid*10;
select gid,x,y,astext(geom) from capaxy;
gid | x | y | astext
-----+----+----+--------
30 | 10 | 20 |
40 | 11 | 21 |
(2 rows)
update capaxy set x=12;
select gid,x,y,astext(geom) from capaxy;
gid | x | y | astext
-----+----+----+--------------
30 | 12 | 20 | POINT(12 20)
40 | 12 | 21 | POINT(12 21)
(2 rows)
-- Cambio para que tambien actualiza cuando cambio la geometria BEGIN TRANSACTION;
CREATE OR REPLACE FUNCTION tggFunction_updateEventos() RETURNS trigger AS
$$
BEGIN
IF ((NEW.x != OLD.x) OR (NEW.y != OLD.y)) THEN
NEW.geom = ST_MAKEPOINT (NEW.x, NEW.y);
ELSE
IF (NOT (NEW.geom ~= OLD.geom)) THEN
NEW.x = ST_X (NEW.geom);
NEW.y = ST_Y (NEW.geom);
END IF;
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS tggUpdateEventos ON capaxy;
CREATE TRIGGER tggUpdateEventos
BEFORE UPDATE ON capaxy
FOR EACH ROW EXECUTE PROCEDURE tggFunction_updateEventos();
END TRANSACTION;
-- y ahora lo probamos de nuevo
update capaxy set geom=ST_MAKEPOINT (20,30+gid);
select gid,x,y,astext(geom) from capaxy;
gid | x | y | astext
-----+----+----+--------------
30 | 20 | 60 | POINT(20 60)
40 | 20 | 70 | POINT(20 70)
Criar um novo cluster
sudo /etc/init.d/postgresql-8.3 stop
# parar o serviço. Em SUSE /etc/init.d/postgresql stop cd /home/user/
# ir a /home/user/ mkdir PostgreSQL
# criar uma nova pasta onde vai residir o novo cluster sudo chown -R postgres PostgreSQL
# mudar o dono da pasta su postgres
# mudar para o usuario postgres /usr/lib/postgresql/8.3/bin/initdb -E UTF8 /home/user/PostgreSQL
# cria a estrutura de pastas necessárias e a codificaçao UTF8 /usr/lib/postgresql/8.3/bin/pg_ctl -D /home/user/PostgreSQL start
# arrancar o serviço na nova pasta psql
# entra no gestor de base de dados \l
# mostra as bases de dados que existem no cluster recém criadoMudar de um cluster a outro
su postgres
/etc/init.d/postgresql-8.3 stop
# para el serviço /usr/lib/postgresql/8.3/bin/pg_ctl -D /home/user/PostgreSQL start
# em SUSE /etc/init.d/postgresql start http://ryandaigle.com/articles/2006/6/6/changing-postgresql-s-data-directory-in-ubuntu When installing PostgreSQL on debian the install process asks you what directory you want to contain your actual table data – which is nice when you want to use a dedicated partition instead of the default /var/lib/postgresql/data. However, in Ubuntu (Dapper Drake and Breezy Badger) the install process doesn’t give you the option of changing the default directory. Here are some quick notes on how to change the data directory to an existing non-default data dir (specifically for postgresql 7.4): remove the /etc/postgresql/7.4/main/pgdata symlink create a new pgdata symlink that points to your desired data directory. Make sure the pg_hba.conf, pg_ident.conf, postgresql.conf and root.crt symlinks in the data dir point back to the originals in /etc/postgresql/7.4/main Restart postgres and you should now be running from you desired, non-default data directory. https://bugs.launchpad.net/ubuntu/+source/postgresql-8.2/+bug/162517how can I change the location of my database :-?On cluster creation: pg_createcluster -d /path/to/data/dir (see manpage).On already existing clusters: - stop the db (init script or pg_ctlcluster) - move /var/lib/postgresql/8.2/main to whereever you want - do either of (whichever you like more): * change the /etc/postgresql/8.2/main/ pgdata symlink to the new location
* set data_directory in /etc/postgresql/8.2/main/postgresql.conf and remove above symlink [1]
Martin
[1] I know that removal of the symlink should not be necessary, the
config file option should trump the pgdata symlink. This is fixed in
the current versions in Hardy.
http://ubuntuforums.org/showthread.php?t=16324> Hi, > I've not had a chance to test the packages yet, however on the webpage > you didn't mention where the data files are stored? Should I assume > /var/spool/pgsql/$version/$cluster or something similar? The standard location is /var/lib/postgresql/$version/$cluster. However, "pg_createcluster" allows to specify a different location and you can also easily move around existing clusters by moving the directory and adapting the symlink /etc/postgresql/$version/$cluster/pgdata.http://www.dbrunas.com.ar/article.php/20952.13539549http://www.dbrunas.com.ar/article.php/20061106221307869/etc/rc.d/init.d/postgresqlhttp://ubuntuforums.org/showthread.php?t=355501Postgres does start successfully at boot-up. However, it starts the wrong cluster - the one created automatically at installation - and not the user-defined cluster.So I have to use pg_ctl to stop the default cluster (the one created at /etc/postgresql/8.2/main/ pgdata), and then again to start my cluster (the one I created at /usr/local/pgsql/data).
I wish I could eliminate this extra step
Conectar Access a PostgreSQL
Instalar conector ODBC de PostreSQL
Descarregar a versão da base de dados PostgreSQL instalada, descomprimir e instalar o ficheiro msi.
Criar conexão
Painel de controlo -> Ferramentas administrativas -> Origem de dados (ODBC) -> DSN de usuário -> Agregar... -> PostgreSQL Unicode -> Finalizar -> Em "Data Source" por o nome da conexão (aconselhavel por o nome da base de dados a que nos vamos conectar para que nos lembremos), em "Database" o nome da base de dados a que nos quemos conectar que está em PostgreSQL, "Server" nome do PC (ou IP?), "User Name" nome de usuário PostgreSQL, "Password" senha de usuário PostgreSQL. Test, se está tudo bem, guardar -> Save.
Conectar
Abrir uma base de dados Access em branco ir a Ficheiro -> Obter dados externos -> Vincular tabelas... -> Em tipo de ficheiro seleccionar "Bases de dados ODBC()" -> Seleccionar a 2º aba "Origem de dados do equipo" -> Seleccionar o conector criado -> Aceitar -> Seleccionar tudo -> Aceitar.
Fonte: Vehrka
Comandos psql
Geral
\c[onnect] [NOMEBD|- USUÁRIO|- MÁQUINA|- PORTA|-]conecta a um outro banco de dados
\cd [DIRETÓRIO] muda o diretório de trabalho atual
\copyright mostra termos de uso e distribuição do PostgreSQL
\encoding [CODIFICAÇÃO] mostra ou define codificação do cliente
\h [NOME] mostra sintaxe dos comandos SQL, * para todos os comandos
\q sair do psql
\set [NOME [VALOR]] define variável interna ou lista todos caso não tenha parâmetros
\timing alterna para duração da execução de comandos (atualmente desabilitado)
\unset NOME apaga (exclui) variável interna
\! [COMANDO] executa comando na shell ou inicia shell iterativa
Buffer de consulta
\e [ARQUIVO] edita o buffer de consulta (ou arquivo) com um editor externo
\g [ARQUIVO] envia o buffer de consulta para o servidor
\p mostra o conteúdo do buffer de consulta
\r reinicia (apaga) o buffer de consulta
\s [ARQUIVO] mostra histórico ou grava-o em um arquivo
\w [ARQUIVO] escreve o buffer de consulta para arquivo
Entrada/Saída
\echo [STRING] escreve cadeia de caracteres na saída padrão
\i ARQUIVO executa comandos de um arquivo
\o [ARQUIVO] envia todos os resultados da consulta para arquivo ou |pipe
\qecho [STRING] escreve cadeia de caracteres para saída da consulta (veja \o)
Informativo
\d [NOME] descreve tabela, índice, sequência ou visão
\d {t|i|s|v|S} [MODELO] (adicione "+" para obter mais detalhe)
lista tabelas/índices/sequências/visões/tabelas do sistema
\da [MODELO] lista funções de agregação
\db [MODELO] lista espaços de tabelas (adicione "+" para obter mais detalhe)
\dc [MODELO] lista conversões
\dC lista conversões de tipos
\dd [MODELO\] mostra comentário do objeto
\dD [MODELO] lista domínios
\df [MODELO] lista funções (adicione "+" para obter mais detalhe)
\dg [MODELO] lista grupos
\dn [MODELO] lista esquemas (adicione "+" para obter mais detalhe)
\do [NOME] lista operadores
\dl lista objetos grandes, mesmo que \lo_list
\dp [MODELO] lista privilégios de acesso de tabelas, visões e sequências
\dT [MODELO] lista tipos de dado (adicione "+" para obter mais detalhe)
\du [MODELO] lista usuários
\l lista todos os bancos de dados (adicione "+" para obter mais detalhe)
\z [MODELO] lista privilégios de acesso de tabelas, visões e sequências (mesmo que \dp)
Formatação
\a alterna entre modo de saída desalinhado e alinhado
\C [STRING] define o título da tabela, ou apaga caso nada seja especificado
\f [STRING] mostra ou define separador de campos para saída de consulta desalinhada
\H alterna para modo de saída em HTML (atual desabilitado)
\pset NOME [VALOR] define opção de saída da tabela
(NOME := {format|border|expanded|fieldsep|footer|null|
numericlocale|recordsep|tuples_only|title|tableattr|pager})
\t mostra somente registros (atual desabilitado)
\T [STRING] define atributos do marcador HTML <table> ou apaga caso nada seja especificado
\x alterna para saída expandida (atual desabilitado)
Cópia, Objetos Grandes
\copy ... realiza comando SQL COPY dos dados para máquina cliente
\lo_export OIDLOB ARQUIVO
\lo_import ARQUIVO [COMENTÁRIO]
\lo_list
\lo_unlink OIDLOB operações com objetos grandes
Tipos de dados
Esquema | Nome | Descrição
------------+-----------------------+------------------------------------------------
pg_catalog | abstime | absolute, limited-range date and time (Unix system time)
pg_catalog | aclitem | access control list
pg_catalog | "any" |
pg_catalog | anyarray |
pg_catalog | anyelement |
pg_catalog | bigint | ~18 digit integer, 8-byte storage
pg_catalog | bit | fixed-length bit string
pg_catalog | bit varying | variable-length bit string
pg_catalog | boolean | boolean, 'true'/'false'
pg_catalog | box | geometric box '(lower left,upper right)'
pg_catalog | bytea | variable-length string, binary values escaped
pg_catalog | "char" | single character
pg_catalog | character | char(length), blank-padded string, fixed storage length
pg_catalog | char. varying | varchar(length), non-blank-padded string, variable storage length
pg_catalog | cid | command identifier type, sequence in transaction id
pg_catalog | cidr | network IP address/netmask, network address
pg_catalog | circle | geometric circle '(center,radius)'
pg_catalog | cstring |
pg_catalog | date | ANSI SQL date
pg_catalog | double precision | double-precision floating point number, 8-byte storage
pg_catalog | inet | IP address/netmask, host address, netmask optional
pg_catalog | int2vector | array of int2, used in system tables
pg_catalog | integer | -2 billion to 2 billion integer, 4-byte storage
pg_catalog | internal |
pg_catalog | interval | @ <number> <units>, time interval
pg_catalog | language_handler |
pg_catalog | line | geometric line (not implemented)'
pg_catalog | lseg | geometric line segment '(pt1,pt2)'
pg_catalog | macaddr | XX:XX:XX:XX:XX:XX, MAC address
pg_catalog | money | monetary amounts, $d,ddd.cc
pg_catalog | name | 63-character type for storing system identifiers
pg_catalog | numeric | numeric(precision, decimal), arbitrary precision number
pg_catalog | oid | object identifier(oid), maximum 4 billion
pg_catalog | oidvector | array of oids, used in system tables
pg_catalog | opaque |
pg_catalog | path | geometric path '(pt1,...)'
pg_catalog | point | geometric point '(x, y)'
pg_catalog | polygon | geometric polygon '(pt1,...)'
pg_catalog | real | single-precision floating point number, 4-byte storage
pg_catalog | record |
pg_catalog | refcursor | reference cursor (portal name)
pg_catalog | regclass | registered class
pg_catalog | regoper | registered operator
pg_catalog | regoperator | registered operator (with args)
pg_catalog | regproc | registered procedure
pg_catalog | regprocedure | registered procedure (with args)
pg_catalog | regtype | registered type
pg_catalog | reltime | relative, limited-range time interval (Unix delta time)
pg_catalog | smallint | -32 thousand to 32 thousand, 2-byte storage
pg_catalog | smgr | storage manager
pg_catalog | text | variable-length string, no limit specified
pg_catalog | tid | (Block, offset), physical location of tuple
pg_catalog | timestamp without time zone| date and time
pg_catalog | timestamp with time zone | date and time with time zone
pg_catalog | time without time zone | hh:mm:ss, ANSI SQL time
pg_catalog | time with time zone | hh:mm:ss, ANSI SQL time
pg_catalog | tinterval | (abstime,abstime), time interval
pg_catalog | "trigger" |
pg_catalog | "unknown" |
pg_catalog | void |
pg_catalog | xid | transaction id
Comandos SQL
ABORT
ALTER AGGREGATE
ALTER CONVERSION
ALTER DATABASE
ALTER DOMAIN
ALTER FUNCTION
ALTER GROUP
ALTER INDEX
ALTER LANGUAGE
ALTER OPERATOR CLASS
ALTER OPERATOR
ALTER ROLE
ALTER SCHEMA
ALTER SEQUENCE
ALTER TABLE
ALTER TABLESPACE
ALTER TRIGGER
ALTER TYPE
ALTER USER
ANALYZE
BEGIN
CHECKPOINT
CLOSE
CLUSTER
COMMENT
COMMIT
COMMIT PREPARED
COPY # carrega dados desde um ficheiro de texto plano a uma tabela. exemplo: COPY tabela_vazia FROM '/home/ficheiro_com_os_dados.dat' with null 'NULL' delimiter ';' ;
CREATE AGGREGATE
CREATE CAST
CREATE CONSTRAINT TRIGGER
CREATE CONVERSION
CREATE DATABASE
CREATE DOMAIN
CREATE FUNCTION
CREATE GROUP
CREATE INDEX
CREATE LANGUAGE
CREATE OPERATOR CLASS
CREATE OPERATOR
CREATE ROLE
CREATE RULE
CREATE SCHEMA
CREATE SEQUENCE
CREATE TABLE
CREATE TABLE AS
CREATE TABLESPACE
CREATE TRIGGER
CREATE TYPE
CREATE USER
CREATE VIEW
DEALLOCATE
DECLARE
DELETE
DROP AGGREGATE
DROP CAST
DROP CONVERSION
DROP DATABASE
DROP DOMAIN
DROP FUNCTION
DROP GROUP
DROP INDEX
DROP LANGUAGE
DROP OPERATOR CLASS
DROP OPERATOR
DROP OWNED
DROP ROLE
DROP RULE
DROP SCHEMA
DROP SEQUENCE
DROP TABLE
DROP TABLESPACE
DROP TRIGGER
DROP TYPE
DROP USER
DROP VIEW
END
EXECUTE
EXPLAIN
FETCH
GRANT
INSERT
LISTEN
LOAD
LOCK
MOVE
NOTIFY
PREPARE
PREPARE TRANSACTION
REASSIGN OWNED
REINDEX
RELEASE SAVEPOINT
RESET
REVOKE
ROLLBACK
ROLLBACK PREPARED
ROLLBACK TO SAVEPOINT
SAVEPOINT
SELECT
SELECT INTO
SET
SET CONSTRAINTS
SET ROLE
SET SESSION AUTHORIZATION
SET TRANSACTION
SHOW
START TRANSACTION
TRUNCATE
UNLISTEN
UPDATE
VACUUM
VALUES
Condicionais
http://www.postgresql.org/docs/current/interactive/functions-conditional.htmlCASE WHEN
UPDATE tabela SET campo1 = CASE WHEN campo2 > campo3 THEN campo2 ELSE campo3 END;
GREATEST
UPDATE tabela SET campo1 = GREATEST(campo2 , campo3 );
Regras da lista de correio: http://www.postgresql.org.br/RegrasLista
PostgreSQL Cheat Sheet
http://www.petefreitag.com/cheatsheets/postgresql/ Manual PostGIS em português:
http://www.webgis.com.br/postgis Wiki de PostGIS:
http://postgis.refractions.net/support/wiki/