Re: [pgbr-geral] ajuda com consulta

2014-10-27 Por tôpico Eloi Ribeiro

On 2014-10-27 15:13, Matheus de Oliveira wrote:

Agora está mais claro. Vamos lá, supondo a tabela "dados(a int, b
int)", se não me enganei em algo, a seguinte consulta trará o
resultado esperado:

WITH elements(a,b) AS (
SELECT DISTINCT least(a, b), greatest(a, b)
FROM dados
)
SELECT e1.* FROM elements e1
WHERE NOT EXISTS(SELECT 1 FROM elements e2 WHERE e1.a = e2.b);

 a |   b
---+---
 5 | 12842
 5 | 62410
 5 | 62409
(3 rows)

Verifique em seus dados se atingem o resultado esperado.


Perfeito! Passei de 82978 resultados para 21407 esperados.

Muito obrigado!

Eloi
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] ajuda com consulta

2014-10-27 Por tôpico Eloi Ribeiro

Não entendi porque 12842;62409, 12842;62410 e 62410;62409 não entram
no resultado, poderia explicar melhor?



Não entendi o resultado desejado.
Por que, por ex., o par (12842, 62410) não faz parte do resultado?


Vou tentar explicar melhor.

Esta tabela indica-me que:
5=12842
5=62409
5=62410
12842=5
12842=62409
12842=62410
62409=5
62409=12842
62409=62410
62410=5
62410=12842
62410=62409

Então se 5=12842, 5=62409 e 5=62410, já sei que 12842=62409, 12842=62410 
e 62410=62409. Estes três últimos resultados estão a repetir a mesma 
informação.

Esqueci-me de indicar isto no primeiro correio.
Obrigado. Cumprimentos,

Eloi
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] ajuda com consulta

2014-10-27 Por tôpico Eloi Ribeiro

Ola a todos da lista,

Tenho uma tabela com possíveis combinações entre valores, e essas 
combinações repetem-se mas numa ordem distinta. Exemplo:


5;12842
5;62409
5;62410
12842;5
12842;62409
12842;62410
62409;5
62409;12842
62409;62410
62410;5
62410;12842
62410;62409

Como posso fazer uma consulta para selecionar apenas as combinações 
possíveis?


5;12842
5;62409
5;62410

Obrigado. Cumprimentos,

Eloi
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] ERROR: could not write to hash-join temporary file: No space left on device

2014-09-22 Por tôpico Eloi Ribeiro

A base de dados está numa tablespace em /home/basedados.

Acabo de me dar conta que a base de dados esta em TABLESPACE =
pg_default, poder ser este o motivo.


Resolvido com:
ALTER DATABASE test SET TABLESPACE basedados;

--
Eloi Ribeiro
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] ERROR: could not write to hash-join temporary file: No space left on device

2014-09-22 Por tôpico Eloi Ribeiro

A base de dados está numa tablespace em /home/basedados.
Acabo de me dar conta que a base de dados esta em TABLESPACE = 
pg_default, poder ser este o motivo.


Eloi Ribeiro
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] ERROR: could not write to hash-join temporary file: No space left on device

2014-09-22 Por tôpico Eloi Ribeiro

Ola,

Estou a tentar criar uma vista materializada e tenho sempre a seguinte 
mensagem de erro:
ERROR:  could not write to hash-join temporary file: No space left on 
device


Embora na partição root tenha 10 Gb de espaço livre e na partição /home 
480 Gb livres.

A base de dados está numa tablespace em /home/basedados.
Porque isto acontece quando existe espaço livre e como posso contornar 
ou resolver este problema?


Detalhes do software:
SELECT version();
   version
--
 PostgreSQL 9.3.5 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu 
4.8.2-19ubuntu1) 4.8.2, 64-bit


Obrigado. Cumprimentos,

Eloi
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] ajuda com funcao

2014-06-13 Por tôpico Eloi Ribeiro

On 2014-06-13 12:02, Matheus de Oliveira wrote:

2014-06-13 6:39 GMT-03:00 Eloi Ribeiro :



Em primeiro lugar, você não precisaria do EXECUTE, basta executar os
comandos SQL diretamente. No seu caso o EXECUTE não é só ruim,
está **errado**, pois não trata corretamente escape e está
suscetível à SQL-injection.


Obrigado, isso era o que me faltava saber.


Agora, se quer recuperar o valor, mas caso não tenha inserir, basta
usar a variável FOUND (ainda não está bom, veja as considerações
abaixo):


Muito melhor a solução que apresentas, poupo um passo.



Agora, essa função apesar de **aparentemente** fazer o que você
quer, ainda tem diversos "possíveis" problemas:

1. Você busca usando ILIKE (até troquei por lower+LIKE, por ser mais
eficiente), mas o que acontece se retornar mais de um registro?
Poderia acontecer? No caso acima o PG irá pegar um deles
arbitrariamente (na sorte mesmo). Será que você não queria ter
usando igualdade? O campo "Name" é único (tem chave UNIQUE)?


Tem um UNIQUE, não existem valores repetidos.


2. A função não está tratando concorrência. Imagine o que
acontece se você fizer o SELECT, não retornar nada, mas quando for
fazer um INSERT alguém acabou de um "Name" que casaria. Se "Name" for
UNIQUE vai dar um problemão; se não, só vai ser estranho e acho que
você deveria repensar seriamente no seu modelo de dados e suas
operações (me cheira mal, mas tenho pouca informação para
afirmar).


Não deveria passar porque nesta tabela só podem inserir valores muito 
pouca gente. Mas terei cuidado com isso.



3. Por que está usando nomes de tabelas e atributos com aspas duplas?
Não acha que fica horrível de usar assim depois? (esse não é um
problema de fato, só uma prática ruim na minha opinião).


Eu também não gosto nada e da-me muitas dores de cabeça quando tenho de 
escrever código em Python. Pois todo o banco de dados, todos os objetos 
estão em "PascalCase", uma loucura. Cada vez que tenho de por uma aspa 
(") tenho de pressionar 3 teclas! E não imaginas o que me custou de 
convencer-lhes de que isto não é o mais ótimo. Mas se fosse só isso...


A função ficou assim:

CREATE OR REPLACE FUNCTION "Attribute".fun_insert_attribute(name text, 
description text, type text)

  RETURNS text AS
$BODY$
DECLARE
attribute_id integer;
BEGIN
-- verifica se ja existe e devolve o id
SELECT "AttributeId" INTO attribute_id FROM "Attribute"."Attribute" 
WHERE lower(trim("Name")) LIKE lower(trim(name));

-- se nao existe, inserir e conhecer o id
IF NOT FOUND THEN
 INSERT INTO 
"Attribute"."Attribute"("Name","Description",version_type) 
VALUES(trim(name),trim(description),trim(type)) RETURNING "AttributeId" 
INTO attribute_id;

END IF;
RETURN attribute_id;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;


--
Eloi
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] ajuda com funcao

2014-06-13 Por tôpico Eloi Ribeiro

Ola a todos os participantes da lista,

Gostaria de fazer uma função que:
 1. verifica-se se um determinado valor já existe numa tabela
 2. se sim, que me devolva o id desse registo
 3. se não, que faca o insert e em seguida devolva o id resultante

Escrevi a seguinte código mas falta-me saber como recuperar o resultado 
do EXECUTE. Alguém me pode ajudar? Obrigado.


CREATE OR REPLACE FUNCTION "Attribute".fun_insert_attribute(name text, 
description text, type text)

  RETURNS text AS
$BODY$
DECLARE
attribute_id integer;
n integer;
BEGIN
-- verifica se já existe
 EXECUTE 'SELECT count(*) FROM "Attribute"."Attribute" WHERE "Name" 
ILIKE '||name||';'

-- se já existe, conhecer o id
IF n > 1 THEN
 EXECUTE 'SELECT "AttributeId" FROM "Attribute"."Attribute" WHERE 
"Name" ILIKE '||name||';'

-- se não existe, inserir e conhecer o id
ELSE
 EXECUTE 'INSERT INTO 
"Attribute"."Attribute"("Name","Description",version_type) 
VALUES('||name||','||description||','||type||') RETURNING 
"AttributeId";'

END IF;
RETURN attribute_id;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

Os melhores cumprimentos,

--
Eloi
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Migração de postgres + solr para postgres + postGIS

2014-03-21 Por tôpico Eloi Ribeiro

On 2014-03-20 22:41, Sidnei Vladisauskis wrote:

Muito Obrigado, era o que estava pensando a única dúvida que fiquei
é no ST_Point_Inside_Circle, o que seria o geometry a_point?


ST_Point_Inside_Circle(geometry a_point, float center_x, float center_y, 
float radius);
geometry a_point -> geometria do ponto do qual queres saber se esta 
dentro ou não do circulo

float center_x, float center_y -> centro do circulo
float radius -> raio do circulo

A função devolve TRUE / FALSE.

http://postgis.net/docs/manual-2.0/ST_Point_Inside_Circle.html

--
Eloi Ribeiro
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Migração de postgres + solr para postgres + postGIS

2014-03-20 Por tôpico Eloi Ribeiro

On 2014-03-19 02:38, Sidnei Vladisauskis wrote:

Mas como faço para começar a utilizar o PostGis em um BD já
existente?


1) Instala PostGIS, recomendo versão >= 2.0

2) Criar a extensão no teu banco:
psql -d a_tua_base -c "CREATE EXTENSION postgis;"

Se num futuro atualizas o PostGIS:
psql -d postgis -c 'ALTER EXTENSION postgis UPDATE TO "2.x.x";'

3) Adicionar campo com geometria:
ALTER TABLE tabela ADD COLUMN geom geometry(POINT, codigo_epsg); -- 
codigo_epsg para WGS48 = 4326


4) Preencher campo:
UPDATE tabela SET coluna = ST_SetSRID(ST_Makepoint(long,lati), 
codigo_epsg);



Eu queria só fazer um select no postgres com a geolocalização do
usuário, um raio específico e trazer todos spots e seus dados
naquele raio.

Como posso fazer isso?


Para isto podes usar a função ST_Point_Inside_Circle(geometry a_point, 
float center_x, float center_y, float radius)

Ou as funcoes
ST_Intersects(ST_Buffer(geom, valor_raio))


Alguém tem um tutorial ou algum exemplo de como faço isso?


Manual de PostGIS:
http://postgis.net/docs/manual-2.1/index.html

--
Eloi Ribeiro
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] duvida com as aspas dentro de aspas ao criar função

2014-01-20 Por tôpico Eloi Ribeiro

Como faço para passar o valor como inteiro?


Realmente, o next_value devia ser passado como inteiro, não literal.
Para resolver isso, basta usar o %s ao invés de %L. Este irá alocar
o valor diretamente, por isso recomendo um CAST no parâmetro (ele já
é inteiro, mas é só para garantir 100% que não haverá erros):

   format('CREATE SEQUENCE %I.%I START %s OWNED BY %I.%I.%I;', 
, row.next_value::int, ...);



OK! Mudando o %L por %s já passa o valor como inteiro e funciona (mesmo 
sem o cast ::int). A função ficou assim.


CREATE OR REPLACE FUNCTION wosis.fun_create_sequence(sch text)
RETURNS text
LANGUAGE plpgsql VOLATILE
AS
$BODY$
DECLARE
row record;
BEGIN
FOR row IN
SELECT table_name, table_name||'_id' AS id_name, 0 AS 
next_value

FROM information_schema.tables
WHERE table_schema = sch
AND  table_type = 'BASE TABLE'
ORDER BY table_name
LOOP
EXECUTE
format(
   'SELECT max(%I)+1 FROM %I.%I;',
   row.id_name,
   sch,
   row.table_name)
   INTO row.next_value;
EXECUTE
format(
   'CREATE SEQUENCE %I.%I START %s OWNED BY 
%I.%I.%I;',

   sch,
   row.table_name||'_'||row.id_name||'_seq',
   row.next_value,
   sch,
   row.table_name,
   row.id_name
  );
   EXECUTE
   format(
  'ALTER TABLE %I.%I ALTER COLUMN %I SET DEFAULT 
nextval(%L);',

  sch,
  row.table_name,
  row.id_name,
  sch || '.' 
||row.table_name||'_'||row.id_name||'_seq'

 );
END LOOP;
RETURN 'Sequences were created';
END;
$BODY$;
ALTER FUNCTION wosis.fun_create_sequence(text) OWNER TO postgres;
COMMENT ON FUNCTION wosis.fun_create_sequence(text) IS 'Create sequences 
in all tables in a given schema';



Muito obrigado pela ajuda!

[]'s

Eloi

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] duvida com as aspas dentro de aspas ao criar função

2014-01-17 Por tôpico Eloi Ribeiro

Ola a todos,

Estou a tentar criar uma função que crie sequencias em todas as tabelas 
num determinado esquema e não consigo avançar por causa das aspas dentro 
de aspas, alguém pode dar uma ajuda.


Aqui está o código, e o problema com as aspas esta no primeiro e no 
terceiro EXECUTE:


CREATE OR REPLACE FUNCTION wosis.fun_create_sequence(sch text)
  RETURNS text AS
$BODY$
DECLARE
row record;
BEGIN
EXECUTE '  CREATE TEMP TABLE tmp AS
   SELECT table_name, table_name||_id' AS id_name, 0 AS 
next_value

   FROM information_schema.tables
   WHERE table_schema = sch
   AND  table_type = 'BASE TABLE'
   ORDER BY table_name;';
FOR row IN
 SELECT table_name, id_name FROM tmp ORDER BY table_name
LOOP
EXECUTE 'UPDATE tmp SET next_value = (SELECT max(' || 
quote_ident(row.id_name) || ')+1 FROM ' || quote_ident(sch) || '.' || 
quote_ident(row.table_name) || ') WHERE table_name = ' || 
quote_ident(row.table_name) || ';'

END LOOP;
FOR row IN
 SELECT table_name, id_name, next_value FROM tmp ORDER BY table_name
LOOP
EXECUTE 'CREATE SEQUENCE ' || quote_ident(row.table_name) || '_' 
|| quote_ident(row.id_name) || '_seq START ' || 
quote_ident(row.next_value) || ';'
EXECUTE 'ALTER TABLE ' || quote_ident(sch) || '.' || 
quote_ident(row.table_name) || ' ALTER COLUMN ' || 
quote_ident(row.id_name) || ' SET DEFAULT nextval( ' || 
quote_ident(row.table_name) || '_' || quote_ident(row.id_name) || 
'_seq);'

END LOOP;
RETURN 'Sequences were created';
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION wosis.fun_create_sequence(text) OWNER TO postgres;
COMMENT ON FUNCTION wosis.fun_create_sequence(text) IS 'Create sequences 
in all tables from a given schema';


Obrigado,

--
Eloi Ribeiro
GIS Analyst / Programmer
51.9871, 5.6661
flavors.me/eloiribeiro
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] RES: Extensões mais úteis para o PostgreSQL

2014-01-10 Por tôpico Eloi Ribeiro

On 2014-01-09 20:34, Marcelo Costa wrote:


Estou aceitando dicas de extensões para o elefante que vocês

considerem mais

úteis em seu dia a dia.


PostGIS
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] ajuda com função

2013-12-18 Por tôpico Eloi Ribeiro

On 2013-12-18 15:23, Matheus de Oliveira wrote:

2013/12/18 Eloi 


Ola a toda a lista,

Estou a tentar fazer funcionar a seguinte função para mover todas
as
tabelas de um esquema para outro.
Não obtenho nenhum erro mas no entanto nada é movido.
Peculiaridades: o nome do esquema de origem está em "PascalCase" e
o de
destino em minúsculas.

Alguém me pode indicar o que estou a fazer mal?

CREATE OR REPLACE FUNCTION sys_move_tables(sch_from text, sch_to
text)
  RETURNS text AS
$BODY$
DECLARE
    row record;
BEGIN
    FOR row IN SELECT tablename FROM pg_tables WHERE schemaname =
sch_from
    LOOP
        EXECUTE 'ALTER TABLE ' || sch_from || '.' ||
quote_ident(row.tablename) || ' SET SCHEMA ' || sch_to || ';';
    END LOOP;
RETURN 'Tables were moved';
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

ALTER FUNCTION sys_move_tables(text, text) OWNER TO postgres;

SELECT sys_move_tables('"OrigEm"', 'destino');

Obrigado. Cumprimentos,


Simples. Sua função não executa nada por causa da seguinte
consulta:

    SELECT tablename FROM pg_tables WHERE schemaname = sch_from;

Veja que você passou '"OrigEm"' para sch_from, logo essa consulta
ficaria:

    SELECT tablename FROM pg_tables WHERE schemaname = '"OrigEm"';

Mas nas tabelas de catálogo, os nomes são armazenados diretamente,
sem aspas duplas, logo sua consulta não traz nenhum registros e o
loop não é executado.

A solução é não passar com aspas duplas na chamada da função e
tratar dentro da mesma:

    CREATE OR REPLACE FUNCTION sys_move_tables(sch_from text,
sch_to text)
  RETURNS text AS
    $BODY$
    DECLARE
    row record;
    BEGIN
     FOR row IN SELECT tablename FROM pg_tables WHERE
schemaname = sch_from
    LOOP
    EXECUTE 'ALTER TABLE ' || quote_ident(sch_from)
|| '.' ||
    quote_ident(row.tablename) || ' SET SCHEMA ' ||
quote_ident(sch_to) || ';';
     END LOOP;
    RETURN 'Tables were moved';
    END;
    $BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
   
    SELECT sys_move_tables('OrigEm', 'destino');

Atenciosamente,

--
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres [1]



Certo, já funciona.
Obrigado pela ajuda!

Eloi








___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] separar caracteres minúsculos dos maiúsculos

2013-10-11 Por tôpico Eloi Ribeiro

Ola,

Tenho uma coluna de texto com códigos geológicos tipo:
lKv
uMIsn
CASi
K
CAS

Gostaria de separar os caracteres minúsculos dos maiúsculos, obtendo o 
seguinte resultado:

min_prefixo,maiusculos,min_sufixo
l,K,v
u,MI,sn
,CAS,i
,K,
,CAS,

A dificuldade que encontro deve-se a que não existe uma longitude fixa 
para todos os casos.


Cumprimentos,

Eloi
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Consulta com 'NOT IN' devolve resultado não esperado

2013-01-10 Por tôpico Eloi Ribeiro

Seria mais interessante você utilizar a combinação de consultas,
no seu caso eu usaria o EXCEPT [1], resumindo seria:

SELECT
   indicativo
FROM
sch_meteo.tmp_estacione
EXCEPT
SELECT
codigo
FROM
sch_meteo.es_estaciones;



Nao conecia o EXCEPT nem o comportamento padrão do NOT IN, estava a 
fazer uma interpretação literal. Com esta lista estamos sempre a 
aprender. Obrigado!


Agora funciona na perfeição:

SELECT indicativo
FROM sch_meteo.tmp_estaciones
EXCEPT
SELECT codigo
FROM sch_meteo.es_estaciones; -- 17 rows retrieved.

Eloi
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] Consulta com 'NOT IN' devolve resultado não esperado

2013-01-10 Por tôpico Eloi Ribeiro
Ola a todos,

Tenha duas tabelas com estações meteorológicas e quero saber quais são 
as estações que estão numa tabela (tmp_estaciones) mas não na outra 
(es_estaciones). Para tal executo a seguinte consulta:

SELECT indicativo
FROM sch_meteo.tmp_estaciones
WHERE indicativo NOT IN (
 SELECT codigo
 FROM sch_meteo.es_estaciones);
-- 0 rows retrieved.

De antemão eu sei que há estações em 'tmp_estaciones' que não estão em 
'es_estaciones'. Assim que o resultado não deveria ser zero linhas. As 
seguintes consultas comprovam isso mesmo:

SELECT indicativo
FROM sch_meteo.tmp_estaciones
WHERE indicativo = 'C917E'; -- 1 row retrieved.

SELECT codigo
FROM sch_meteo.es_estaciones
WHERE codigo = 'C917E'; -- 0 rows retrieved.

O quê que estou a fazer mal?

Obrigado. Cumprimentos,

Eloi
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] PostGis

2012-12-13 Por tôpico Eloi Ribeiro
> como assim amigo usar o parametro -W? onde usar? É que eu sou novo no 
> postgis, poderia me explicar melhor?
Não indicaste que método usas para subir os shapes a PostgreSQL. 
Assumindo que usas o shp2pgsql, seria assim:

shp2pgsql -s 4326 -g geom -D -I -W iso-8859-1 
C:\Users\Jonnathann\Desktop\Shapefiles\Municipios.shp tb_municipios 
bd_nome | psql -d bd_nome

Parametros shp2pgsql:
   -s   Set the SRID field. Defaults to -1.
   (-d|a|c|p) These are mutually exclusive options:
   -d  Drops the table, then recreates it and populates it 
with current shape file data.
   -a  Appends shape file into current table, must be 
exactly the same table schema.
   -c  Creates a new table and populates it, this is the 
default if you do not specify any options.
   -p  Prepare mode, only creates the table.
   -g  Specify the name of the geometry/geography 
column (mostly useful in append mode).
   -D  Use postgresql dump format (defaults to SQL insert statments.
   -G  Use geography type (requires lon/lat data).
   -k  Keep postgresql identifiers case.
   -i  Use int4 type for all integer dbf fields.
   -I  Create a spatial index on the geocolumn.
   -S  Generate simple geometries instead of MULTI geometries.
   -W  Specify the character encoding of Shape's 
attribute column. (default : "WINDOWS-1252"), iso-8859-1 (codificacao 
Latin-1)
   -N  NULL geometries handling policy (insert*,skip,abort)
   -n  Only import DBF file.

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] PostGis

2012-12-13 Por tôpico Eloi Ribeiro

> Importing with configuration: municipios, public, geom, 
> C:\Users\Jonnathann\Desktop\Shapefiles\Municipios, mode=c, dump=1, 
> simple=0, geography=0, index=1, shape=1, srid=0
> Unable to convert field name to UTF-8 (iconv reports "Invalid 
> argument"). Current encoding is "UTF-8". Try "LATIN1" (Western 
> European), or one of the values described at 
> http://www.gnu.org/software/libiconv/.
> Shapefile import failed.

Se estas a usar shp2pgsql utiliza o parâmetro '-W' para indicar a 
codificação do shapefile. Se tens o shapefile en latin1, deveria ser '-W 
iso-8859-1'.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Saber a dif min entre timestamp's de duas tabelas

2012-07-31 Por tôpico Eloi Ribeiro
Obrigado pela dica Tiago, a consulta funciona muito melhor com essa dica.

Ficou assim:
*SELECT DISTINCT ON (f.ficheiro) *
*   f.ficheiro,*
*   (f.photo_datetimeoriginal - '00:03:22'::interval) - (p."time" +
'02:00:00'::interval) AS dif_ts, *
*   ST_X(p.geom) AS x, *
*   ST_Y(p.geom) AS y *
*FROM sch_forestal.fotos AS f, *
*  sch_forestal.gps_track_points AS p*
*WHERE (p."time" + '02:00:00'::interval) *
*  BETWEEN (f.photo_datetimeoriginal - '00:03:22'::interval -
'00:00:05'::interval) *
*  AND (f.photo_datetimeoriginal - '00:03:22'::interval +
'00:00:05'::interval)*
*ORDER BY f.ficheiro;*

Agora vejo que testando com diferentes margens de erro obtenho diferentes
resultados.
Nao existe uma maneira de que me devolva a diferença minima existente estre
os dois timestamps?

-- '00:00:*10*'::interval
ficheiro;dif_ts;x;y
"2012-07-17-11-13-06.jpg";"*00:00:04*";718135.21515306;4380177.22342103
"2012-07-17-11-13-15.jpg";"*-00:00:02*";717996.344046553;4380255.12938927
"2012-07-17-11-22-21.jpg";"*-00:00:04*";708842.044380715;4388544.55736434

-- '00:00:*30*'::interval
ficheiro;dif_ts;x;y
"2012-07-17-11-13-06.jpg";"*-00:00:15*";717947.652491031;4380279.53855042
"2012-07-17-11-13-15.jpg";"*-00:00:08*";717922.784056217;4380296.11437229
"2012-07-17-11-22-21.jpg";"*00:00:30*";709698.090967436;4388139.22602785

Obrigado pela ajuda,

Eloi Ribeiro
GIS Analyst
39,45º -0,40º
flavors.me/eloiribeiro


No dia 27 de Julho de 2012 19:20, Tiago Adami  escreveu:

> Em 27 de julho de 2012 12:50, Eloi Ribeiro 
> escreveu:
> > A primeira ideia era que fosse um producto cartesiano mas pensando melhor
> > poderia utilizar a data(ano-mes-dia) para restringir e acelarar um pouco
> a
> > consulta.
> >
> > Em defenitiva a ideia e encontrar o ponto com o timestamp mais proximo
> para
> > cada timestamp de cada foto.
>
> Olá Eloi,
>
> Na exatidão da matemática não há uma noção de próximo ou longínquo, as
> grandezas precisam ser definidas. Dito isto, qual seriam os seus
> limites de "próximo"?
>
> Acredito que neste caso você queira manter uma margem de erro para
> baixo e para cima para encontrar seus registros.
>
> Se você definir esta margem, poderá fazer uma consulta de todos os
> pontos que se enquadram nesta "proximidade" relativa com o predicado -
> usando como exemplo margem de erro de 02:00:00:
>
> (...)
> p.ponto_ts BETWEEN (f.foto_ts - '02:00:0'::interval) AND (f.foto_ts +
> '02:00:0'::interval)
>
> * pode ser que o código não funcione, não tenho como testar agora.
>
> --
> TIAGO J. ADAMI
> http://www.adamiworks.com
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Saber a dif min entre timestamp's de duas tabelas

2012-07-27 Por tôpico Eloi Ribeiro
A primeira ideia era que fosse um producto cartesiano mas pensando melhor
poderia utilizar a data(ano-mes-dia) para restringir e acelarar um pouco a
consulta.

Em defenitiva a ideia e encontrar o ponto com o timestamp mais proximo para
cada timestamp de cada foto.
 No dia 27 de Jul de 2012 14:46, "Guimarães Faria Corcete DUTRA, Leandro" <
l...@dutras.org> escreveu:
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] Saber a dif min entre timestamp's de duas tabelas

2012-07-27 Por tôpico Eloi Ribeiro
Ola a todos,

Tenho uma tabela com o timestamp de fotos (fotos.foto_ts) e outra com o
timestampe de pontos (pontos.ponto_ts).
E a minha intenção é geo-referenciar estas fotos por aproximação entre os
timestamps, calculando a diferença mínima entre eles.

Executei a seguinte consulta:

*SELECT DISTINCT ON (f.foto)*
*   f.foto, *
*   ST_X(p.geom), *
*   ST_Y(p.geom)*
*FROM fotos AS f, *
*  pontos AS p*
*ORDER BY f.foto, *
* (f.foto_ts - '00:03:22'::interval) - (p.ponto_ts +
'02:00:00'::interval);*


*(f.foto_ts - '00:03:22'::interval)* -> ajusta a hora da câmara de fotos.
*(p.ponto_ts + '02:00:00'::interval)* -> ajusta o hora do satélite (solar).

O problema é que demora muito (parei quando ia pelos 5 minutos) ou a
consulta está mal elaborada.
Alguma dica?

Obrigado,

Eloi Ribeiro
GIS Analyst
39,45º -0,40º
flavors.me/eloiribeiro
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] Fwd: [SIG] Database/Programming specialist - Wageningen, Netherlands

2012-04-05 Por tôpico Eloi Ribeiro
-- Forwarded message --
From:
Date: 2012/3/31
Subject: [SIG] Database/Programming specialist - Wageningen, Netherlands
To: s...@listserv.rediris.es


Database/Programming specialist - Wageningen, Netherlands
http://www.peer.eu/opportunities/vacancies/details/?tx_list_pi1%5Buid%5D=118&tx_list_pi1%5Bmode%5D=5&cHash=93a600cde1bdc0b393eba453b757451c



Normas para el correcto uso del correo electrónico:
http://www.rediris.es/mail/estilo.html

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Trigger não dispara

2012-03-26 Por tôpico Eloi Ribeiro
Era isso, faltava o DELETE no CREATE TRIGGER, pondo assim:

CREATE TRIGGER trg_t_incendio
 AFTER INSERT OR UPDATE OR DELETE
 ON t_incendio
 FOR EACH ROW EXECUTE PROCEDURE fun_teste();

Já dispara nas três acções (INSERT, UPDATE e DELETE).

Adicionei esta parte à função para contemplar um UPDATE:

ELSIF (TG_OP = 'UPDATE') THEN
DELETE FROM t_relatorio
WHERE codigo = OLD.codigo;
INSERT INTO t_relatorio(codigo,tipo,nome)
(SELECT i.codigo, a.tipo, a.nome
FROM t_incendio AS i, t_areaprotegida AS a
WHERE (i.geom && a.geom) AND ST_Intersects(i.geom,a.geom)
GROUP BY i.codigo, a.tipo, a.nome
HAVING i.codigo = NEW.codigo);

Perfeito, obrigado pela vossa grande ajuda!

Att,

Eloi Ribeiro
GIS Analyst
39,45º -0,40º
flavors.me/eloiribeiro


No dia 26 de Março de 2012 17:42, Danilo Silva
escreveu:

> A sua trigger somente é executa com ocorre insert ou update, do jeito que
> está nunca será executada para delete.
>
> Crie outra trigger para o evento de delete.
>
> Att.
>
> Danilo
>
> Em 26 de março de 2012 11:00, Eloi Ribeiro escreveu:
>
>>  No INSERT a função dispara correctamente mas no DELETE já não, alguma
>> razão para isso?
>>
>> DELETE FROM t_incendio WHERE codigo=99;
>> SELECT * FROM t_incendio;
>> --nada, ok
>>
>> SELECT * FROM t_relatorio;
>> 1;99;"P. Natural";"Bosque" <- o 'trigger' não disparou para eliminar
>> o registo?
>>
>> Att,
>>
>>
>> Eloi Ribeiro
>> GIS Analyst
>> 39,45º -0,40º
>> flavors.me/eloiribeiro
>>
>>
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Trigger não dispara

2012-03-26 Por tôpico Eloi Ribeiro
No INSERT a função dispara correctamente mas no DELETE já não, alguma razão
para isso?

DELETE FROM t_incendio WHERE codigo=99;
SELECT * FROM t_incendio;
--nada, ok

SELECT * FROM t_relatorio;
1;99;"P. Natural";"Bosque" <- o 'trigger' não disparou para eliminar o
registo?

Att,

Eloi Ribeiro
GIS Analyst
39,45º -0,40º
flavors.me/eloiribeiro
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Trigger não dispara

2012-03-26 Por tôpico Eloi Ribeiro
Era isso Danilo, muito obrigado. Resolvido!
Att.

Eloi Ribeiro
GIS Analyst
39,45º -0,40º
flavors.me/eloiribeiro


No dia 26 de Março de 2012 14:30, Danilo Silva
escreveu:

>
>
> Em 26 de março de 2012 07:36, Eloi Ribeiro escreveu:
>
>> Olá a todos,
>>
>> 
>>
>>
>> CREATE TRIGGER trg_t_incendio BEFORE INSERT OR UPDATE ON t_incendio FOR
>> EACH ROW EXECUTE PROCEDURE fun_teste();
>>
>> 
>>
>
> Creio que o seu erro está em criar a trigger com o BEFORE, no seu caso
> teria que ser AFTER, pois está sendo feito select em uma tabela que não foi
> inserido dados ainda. Altere a trigger para AFTER e veja o resultado.
>
> Att.
> Danilo
>
>
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] Trigger não dispara

2012-03-26 Por tôpico Eloi Ribeiro
Olá a todos,

Estou numa maquina com Ubuntu Desktop 10.04, PostgreSQL 8.4 e PostGIS 1.5.
e não consigo fazer com que um trigger me funcione.
Vou tentar reproduzir o erro aqui:

CREATE TABLE t_incendio (gid serial PRIMARY KEY, codigo bigint);
SELECT AddGeometrycolumn
('public','t_incendio','geom',23030,'MULTIPOLYGON',2);

CREATE TABLE t_areaprotegida (gid serial PRIMARY KEY, tipo varchar(10),
nome varchar(10));
SELECT AddGeometrycolumn
('public','t_areaprotegida','geom',23030,'MULTIPOLYGON',2);

CREATE TABLE t_relatorio (id serial PRIMARY KEY, codigo bigint, tipo
varchar(10), nome varchar(10));

CREATE OR REPLACE FUNCTION fun_teste()
  RETURNS trigger AS
$BODY$
BEGIN
IF (TG_OP = 'INSERT') THEN
INSERT INTO t_relatorio(codigo,tipo,nome)
(SELECT i.codigo, a.tipo, a.nome
FROM t_incendio AS i, t_areaprotegida AS a
WHERE (i.geom && a.geom) AND ST_Intersects(i.geom,a.geom)
GROUP BY i.codigo, a.tipo, a.nome
HAVING i.codigo = NEW.codigo);
ELSIF (TG_OP = 'DELETE') THEN
DELETE FROM t_relatorio
WHERE codigo = OLD.codigo;
END IF;
RETURN NEW;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;

CREATE TRIGGER trg_t_incendio BEFORE INSERT OR UPDATE ON t_incendio FOR
EACH ROW EXECUTE PROCEDURE fun_teste();

INSERT INTO t_areaprotegida (tipo, nome, geom)
VALUES ('P. Natural', 'Bosque', ST_GeomFromText('MULTIPOLYGON(((67
435,68 435,68 434,67 434,67
435)))',23030));
SELECT * FROM t_areaprotegida;
1;"P. Natural";"Bosque";"010620F659010..."

INSERT INTO t_incendio (codigo, geom)
VALUES (99, ST_GeomFromText('MULTIPOLYGON(((675000 435,685000
435,685000 434,675000 434,675000 435)))',23030));
SELECT * FROM t_incendio;
1;99;"010620F6590100010300010..."

SELECT * FROM t_relatorio;
Nada!

Esta é a consulta que está na funçao fun_teste():
SELECT i.codigo, a.tipo, a.nome
FROM t_incendio AS i, t_areaprotegida AS a
WHERE (i.geom && a.geom) AND ST_Intersects(i.geom,a.geom)
GROUP BY i.codigo, a.tipo, a.nome;
99;"P. Natural";"Bosque"

O que é que estou a fazer mal?
Obrigado. Cumprimentos,


Eloi Ribeiro
GIS Analyst
39,45º -0,40º
flavors.me/eloiribeiro
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Ajuda com função - adicionar campo dentro de uma função

2012-03-20 Por tôpico Eloi Ribeiro
Sim, não está bem assim?

CREATE TRIGGER trg_postfire_study_area_UPDATE_dimensoes
BEFORE INSERT OR UPDATE
ON sch_forestal.postfire_study_area
FOR EACH ROW
EXECUTE PROCEDURE fun_dimensoes();


Eloi Ribeiro
GIS Analyst
39,45º -0,40º
flavors.me/eloiribeiro


No dia 20 de Março de 2012 15:09, Matheus de Oliveira <
matioli.math...@gmail.com> escreveu:

> A trigger é BEFORE? Caso contrário não atualiza mesmo.
>
>
>
> --
> Matheus de Oliveira
>
> Bacharelado em Ciências de Computação
> Laboratório de Computação de Alto Desempenho - 
> LCAD<http://www.lcad.icmc.usp.br/>
> Instituto de Ciências Matemáticas e de Computação - 
> ICMC<http://www.icmc.usp.br/>
> Universidade de São Paulo - USP <http://www.sc.usp.br/>
>
>
>
>
> On Tue, Mar 20, 2012 at 10:57 AM, Eloi Ribeiro wrote:
>
>> Obrigado a todos pelas vossas dicas.
>>
>> Fiz isso, retirei a parte de criação de colunas da função e agora não
>> salta nenhum erro.
>> No entanto seria de esperar que quando um polígono fosse editado o campo
>> área fosse actualizado e isso não acontece.
>>
>> Alguém me sabe dizer o que é que está mal?
>>
>>
>>
>> CREATE OR REPLACE FUNCTION fun_dimensoes()
>>   RETURNS trigger AS
>> $BODY$
>> DECLARE
>> tipovarchar(20);
>> sridinteger;
>> BEGIN
>> tipo :=(SELECT "type" FROM geometry_columns
>> WHERE f_table_schema = TG_TABLE_SCHEMA
>> AND f_table_name = TG_TABLE_NAME);
>> srid :=(SELECT srid FROM geometry_columns
>> WHERE f_table_schema = TG_TABLE_SCHEMA
>> AND   f_table_name = TG_TABLE_NAME);
>>  -- ponto
>> IF (tipo = 'POINT' OR tipo = 'MULTIPOINT') THEN
>> NEW.x = ST_X(NEW.geom);
>> NEW.y = ST_Y(NEW.geom);
>> -- linha
>> ELSIF (tipo = 'LINESTRING' OR tipo = 'MULTILINESTRING') THEN
>>
>> IF (srid = 23030 OR srid = 25830) THEN
>> NEW.longitude = ST_Length(NEW.geom)::bigint;
>>
>> ELSIF (srid = 4326) THEN
>> NEW.longitude = ST_Length(Geography(NEW.geom))::bigint;
>> END IF;
>> -- poligono
>> ELSIF (tipo = 'POLYGON' OR tipo = 'MULTIPOLYGON') THEN
>>
>> IF (srid = 23030 OR srid = 25830) THEN
>> NEW.area = ST_Area(NEW.geom)::bigint;
>> NEW.perimetro = ST_Perimeter(NEW.geom)::bigint;
>>
>> ELSIF (srid = 4326) THEN
>> NEW.area = ST_Area(Geography(NEW.geom))::bigint;
>> NEW.perimetro = ST_Length(Geography(NEW.geom))::bigint;
>> END IF;
>> END IF;
>>
>> RETURN NEW;
>> END;
>> $BODY$
>>   LANGUAGE 'plpgsql' VOLATILE
>>   COST 100;
>>
>> Obrigado,
>>
>>
>> Eloi Ribeiro
>> GIS Analyst
>> 39,45º -0,40º
>> flavors.me/eloiribeiro
>>
>>
>> No dia 17 de Março de 2012 21:39, Matheus de Oliveira <
>> matioli.math...@gmail.com> escreveu:
>>
>> Se você passar a trigger para AFTER ao invés de BEFORE suas chances de
>>> não ter lock "aumentam", mas não "desaparecem". Analisando por cima suas
>>> necessidades, não acredito que a melhor solução seja realmente adicionar
>>> uma coluna em uma trigger, isso me parece uma tarefa administrativa, ou
>>> seja, sempre adicione a coluna (talvez junto com a execução do comando
>>> CREATE TRIGGER) e na trigger simplesmente considere que ela já existe (pode
>>> até fazer a verificação e dar um RAISE EXCEPTION caso não exista).
>>>
>>> PS: Caso a trigger seja genérica para várias tabelas, você pode pensar
>>> em usar herança nessas tabelas para organizar melhor as coisas.
>>>
>>> Atenciosamente,
>>> --
>>> Matheus de Oliveira
>>>
>>> Bacharelado em Ciências de Computação
>>> Laboratório de Computação de Alto Desempenho - 
>>> LCAD<http://www.lcad.icmc.usp.br/>
>>> Instituto de Ciências Matemáticas e de Computação - 
>>> ICMC<http://www.icmc.usp.br/>
>>> Universidade de São Paulo - USP <http://www.sc.usp.br/>
>>>
>>>
>>>
>>>
>>>
>>> On Fri, Mar 16, 2012 at 10:07 AM, Eloi Ribeiro 
>>> wrote:
>>>
>>>> O melhor será separar esta função em duas:
>>>> A primeira que verifique se os campos existem e se não os criam.
>>>> E a segunda como disparador para que se actualizem co

Re: [pgbr-geral] Ajuda com função - adicionar campo dentro de uma função

2012-03-20 Por tôpico Eloi Ribeiro
Obrigado a todos pelas vossas dicas.

Fiz isso, retirei a parte de criação de colunas da função e agora não salta
nenhum erro.
No entanto seria de esperar que quando um polígono fosse editado o campo
área fosse actualizado e isso não acontece.

Alguém me sabe dizer o que é que está mal?


CREATE OR REPLACE FUNCTION fun_dimensoes()
  RETURNS trigger AS
$BODY$
DECLARE
tipovarchar(20);
sridinteger;
BEGIN
tipo :=(SELECT "type" FROM geometry_columns
WHERE f_table_schema = TG_TABLE_SCHEMA
AND f_table_name = TG_TABLE_NAME);
srid :=(SELECT srid FROM geometry_columns
WHERE f_table_schema = TG_TABLE_SCHEMA
AND   f_table_name = TG_TABLE_NAME);
-- ponto
IF (tipo = 'POINT' OR tipo = 'MULTIPOINT') THEN
NEW.x = ST_X(NEW.geom);
NEW.y = ST_Y(NEW.geom);
-- linha
ELSIF (tipo = 'LINESTRING' OR tipo = 'MULTILINESTRING') THEN
IF (srid = 23030 OR srid = 25830) THEN
NEW.longitude = ST_Length(NEW.geom)::bigint;
ELSIF (srid = 4326) THEN
NEW.longitude = ST_Length(Geography(NEW.geom))::bigint;
END IF;
-- poligono
ELSIF (tipo = 'POLYGON' OR tipo = 'MULTIPOLYGON') THEN
IF (srid = 23030 OR srid = 25830) THEN
NEW.area = ST_Area(NEW.geom)::bigint;
NEW.perimetro = ST_Perimeter(NEW.geom)::bigint;
ELSIF (srid = 4326) THEN
NEW.area = ST_Area(Geography(NEW.geom))::bigint;
NEW.perimetro = ST_Length(Geography(NEW.geom))::bigint;
END IF;
END IF;
RETURN NEW;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;

Obrigado,

Eloi Ribeiro
GIS Analyst
39,45º -0,40º
flavors.me/eloiribeiro


No dia 17 de Março de 2012 21:39, Matheus de Oliveira <
matioli.math...@gmail.com> escreveu:

> Se você passar a trigger para AFTER ao invés de BEFORE suas chances de não
> ter lock "aumentam", mas não "desaparecem". Analisando por cima suas
> necessidades, não acredito que a melhor solução seja realmente adicionar
> uma coluna em uma trigger, isso me parece uma tarefa administrativa, ou
> seja, sempre adicione a coluna (talvez junto com a execução do comando
> CREATE TRIGGER) e na trigger simplesmente considere que ela já existe (pode
> até fazer a verificação e dar um RAISE EXCEPTION caso não exista).
>
> PS: Caso a trigger seja genérica para várias tabelas, você pode pensar em
> usar herança nessas tabelas para organizar melhor as coisas.
>
> Atenciosamente,
> --
> Matheus de Oliveira
>
> Bacharelado em Ciências de Computação
> Laboratório de Computação de Alto Desempenho - 
> LCAD<http://www.lcad.icmc.usp.br/>
> Instituto de Ciências Matemáticas e de Computação - 
> ICMC<http://www.icmc.usp.br/>
> Universidade de São Paulo - USP <http://www.sc.usp.br/>
>
>
>
>
>
> On Fri, Mar 16, 2012 at 10:07 AM, Eloi Ribeiro wrote:
>
>> O melhor será separar esta função em duas:
>> A primeira que verifique se os campos existem e se não os criam.
>> E a segunda como disparador para que se actualizem com os inserts e
>> updates.
>> Obrigado pela ajuda!
>>
>>
>> Eloi Ribeiro
>> GIS Analyst
>> 39,45º -0,40º
>> flavors.me/eloiribeiro
>>
>>
>> No dia 16 de Março de 2012 13:04, Flavio Henrique Araque Gurgel <
>> fha...@gmail.com> escreveu:
>>
>> > Cancelando as demais transações/conexões também resolve seu problema
>>> > *se, e somente se* isto não for um problema no seu cenário.
>>>
>>> Minha experiência com DDL dentro de funções é de resultado sempre
>>> inesperado.
>>> Se a função é específica para ser executada em horário controlado,
>>> geralmente é uma mão na roda. DBAs de madrugada sempre se dão melhor
>>> executando funções do que comandos mais complexos ou scripts.
>>> Já se a função é para ser chamada automaticamente por causa de uma
>>> necessidade de uma aplicação ou usuário, a chance de lock é
>>> monstruosa, e é o que está ocorrendo com o colega.
>>>
>>> []s
>>> Flavio Gurgel
>>> ___
>>> pgbr-geral mailing list
>>> pgbr-geral@listas.postgresql.org.br
>>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>>
>>
>>
>> ___
>> pgbr-geral mailing list
>> pgbr-geral@listas.postgresql.org.br
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>>
>
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Ajuda com função - adicionar campo dentro de uma função

2012-03-16 Por tôpico Eloi Ribeiro
O melhor será separar esta função em duas:
A primeira que verifique se os campos existem e se não os criam.
E a segunda como disparador para que se actualizem com os inserts e updates.
Obrigado pela ajuda!

Eloi Ribeiro
GIS Analyst
39,45º -0,40º
flavors.me/eloiribeiro


No dia 16 de Março de 2012 13:04, Flavio Henrique Araque Gurgel <
fha...@gmail.com> escreveu:

> > Cancelando as demais transações/conexões também resolve seu problema
> > *se, e somente se* isto não for um problema no seu cenário.
>
> Minha experiência com DDL dentro de funções é de resultado sempre
> inesperado.
> Se a função é específica para ser executada em horário controlado,
> geralmente é uma mão na roda. DBAs de madrugada sempre se dão melhor
> executando funções do que comandos mais complexos ou scripts.
> Já se a função é para ser chamada automaticamente por causa de uma
> necessidade de uma aplicação ou usuário, a chance de lock é
> monstruosa, e é o que está ocorrendo com o colega.
>
> []s
> Flavio Gurgel
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Ajuda com função - adicionar campo dentro de uma função

2012-03-15 Por tôpico Eloi Ribeiro
Antes de nada obrigada pela vossas respostas.

Efectivamente, Flavio, o esquema "tg_table_schema" não existe. Só depois
buscando um pouco mais encontrei que tinha de por a sentencia SQL ALTER
TABLE assim:

EXECUTE 'ALTER TABLE ' || quote_ident(esquema) || '.' ||
quote_ident(tabela) || ' ADD COLUMN area bigint';

E de esta maneira já reconhecia o esquema e nome da tabela.

Tiago, com EXECUTE IMMEDIATE da-me um erro de sintasis:

EXECUTE IMMEDIATE 'ALTER TABLE ' || quote_ident(esquema) || '.' ||
quote_ident(tabela) || ' ADD COLUMN area bigint';
ERROR: error de sintaxis en o cerca de «IMMEDIATE»

OK, agora sem o 'IMMEDIATE' a função é criada com êxito mas quando se
executa salta o seguinte erro:

ERROR:  no se puede hacer ALTER TABLE en «postfire_study_area» porque está
siendo usada por consultas activas en esta sesión
CONTEXTO:  sentencia SQL: «ALTER TABLE sch_forestal.postfire_study_
area ADD COLUMN area bigint»

Claro a função dispara quando faço um update ou insert na tabela e tem de
calcular a 'area' e o 'perimetro' para os registos afectados. Mas se estes
campos não existem deveriam ser criados e depois actualizados. O problema
parece ser que não se pode criar os campos tendo a tabela um insert ou
update em curso. Isto é mesmo assim ou existe uma maneira de contornar este
problema?

Obrigado!

Eloi Ribeiro
GIS Analyst
39,45º -0,40º
flavors.me/eloiribeiro


No dia 15 de Março de 2012 00:49, Tiago Adami  escreveu:

> Em 12 de março de 2012 07:11, Eloi Ribeiro 
> escreveu:
> > Ola a todos,
> >
> > Estou a fazer a seguinte função para que me actualize o campo 'area' cada
> > vez que exista um INSERT ou UPDATE numa tabela.
> > O problema está que o campo 'area' pode não existir e gostava que nesse
> caso
> > o campo seja criado e preenchido para todos os registos.
> > Como tenho salta-me o erro de que 'Nao existe o esquema
> «tg_table_schema»' e
> > não encontro maneira de resolver isso.
> > Como faço para adicionar um campo à tabela onde dispara a função e se
> > preencha esse campo?
>
> Se bem entendi, queres adicionar uma coluna à tabela quando ela não
> existir. Já tentou mudar o seu ALTER TABLE explícito por:
>
> EXECUTE IMMEDIATE 'ALTER TABLE TG_TABLE_SCHEMA.TG_TABLE_NAME ADD
> COLUMN area bigint';
>
> ?
>
> --
> TIAGO J. ADAMI
> http://www.adamiworks.com
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Ajuda com função - adicionar campo dentro de uma função

2012-03-14 Por tôpico Eloi Ribeiro
Bem, já consegui alguns progressos com a função.
No entanto tenho o seguinte erro:

ERROR:  no se puede hacer ALTER TABLE en «postfire_study_area» porque está
siendo usada por consultas activas en esta sesión
CONTEXTO:  sentencia SQL: «ALTER TABLE sch_forestal.postfire_study_area ADD
COLUMN area bigint»

Fiz as seguintes alterações:



> CREATE OR REPLACE FUNCTION fun_dimensoes()
>   RETURNS trigger AS
> $BODY$
> DECLARE
>

esquemavarchar(20);
tabelavarchar(50);


> tipovarchar(20);
> sridinteger;
> BEGIN
>

esquema := TG_TABLE_SCHEMA;
tabela:= TG_TABLE_NAME;


> tipo := (SELECT "type" FROM geometry_columns
> WHERE f_table_schema = TG_TABLE_SCHEMA
> AND f_table_name = TG_TABLE_NAME);
> srid := (SELECT srid FROM geometry_columns
> WHERE f_table_schema = TG_TABLE_SCHEMA
> AND   f_table_name = TG_TABLE_NAME);
>
> IF (tipo = 'POLYGON' OR tipo = 'MULTIPOLYGON') THEN
> IF NOT EXISTS(SELECT column_name FROM information_schema.columns
> WHERE table_schema = TG_TABLE_SCHEMA
> AND table_name = TG_TABLE_NAME
> AND column_name='area') THEN
>

EXECUTE 'ALTER TABLE ' || quote_ident(esquema) || '.' ||
quote_ident(tabela) || ' ADD COLUMN area bigint';


> IF (srid = 23030 OR srid = 25830) THEN
>

EXECUTE 'UPDATE ' || quote_ident(esquema) || '.' || quote_ident(tabela) ||
' SET area = ST_Area(geom)::bigint';


> ELSIF (srid = 4326) THEN
>

EXECUTE 'UPDATE ' || quote_ident(esquema) || '.' || quote_ident(tabela) ||
' SET area = ST_Area(Geography(geom))::bigint';


> END IF;
> ELSE
> IF (srid = 23030 OR srid = 25830) THEN
> NEW.area = ST_Area(NEW.geom)::bigint;
> ELSIF (srid = 4326) THEN
> NEW.area = ST_Area(Geography(NEW.geom))::bigint;
> END IF;
> END IF;
> END IF;
>
> RETURN NEW;
> END;
> $BODY$
>   LANGUAGE 'plpgsql' VOLATILE
>   COST 100;
>
> CREATE TRIGGER trg_postfire_study_area_UPDATE_dimensoes
> BEFORE INSERT OR UPDATE
> ON sch_forestal.postfire_study_area
> FOR EACH ROW
> EXECUTE PROCEDURE fun_dimensoes();
>
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] Ajuda com função - adicionar campo dentro de uma função

2012-03-14 Por tôpico Eloi Ribeiro
Ola a todos,

Estou a fazer a seguinte função para que me actualize o campo 'area' cada
vez que exista um INSERT ou UPDATE numa tabela.
O problema está que o campo 'area' pode não existir e gostava que nesse
caso o campo seja criado e preenchido para todos os registos.
Como tenho salta-me o erro de que 'Nao existe o esquema «tg_table_schema»'
e não encontro maneira de resolver isso.
Como faço para adicionar um campo à tabela onde dispara a função e se
preencha esse campo?
Sugestões são bem vindas.
Obrigado de ante-mão.

CREATE OR REPLACE FUNCTION fun_dimensoes()
  RETURNS trigger AS
$BODY$
DECLARE
tipovarchar(20);
sridinteger;
BEGIN
tipo = (SELECT "type" FROM geometry_columns
WHERE f_table_schema = TG_TABLE_SCHEMA
AND f_table_name = TG_TABLE_NAME);
srid = (SELECT srid FROM geometry_columns
WHERE f_table_schema = TG_TABLE_SCHEMA
AND   f_table_name = TG_TABLE_NAME);

IF (tipo = 'POLYGON' OR tipo = 'MULTIPOLYGON') THEN
IF NOT EXISTS(SELECT column_name FROM information_schema.columns
WHERE table_schema = TG_TABLE_SCHEMA
AND table_name = TG_TABLE_NAME
AND column_name='area') THEN
*ALTER TABLE TG_TABLE_SCHEMA.TG_TABLE_NAME ADD COLUMN area
bigint;*
IF (srid = 23030 OR srid = 25830) THEN
*UPDATE TG_TABLE_SCHEMA.TG_TABLE_NAME SET area =
ST_Area(geom)::bigint;*
ELSIF (srid = 4326) THEN
*UPDATE TG_TABLE_SCHEMA.TG_TABLE_NAME SET area =
ST_Area(Geography(geom))::bigint;*
END IF;
ELSE
IF (srid = 23030 OR srid = 25830) THEN
NEW.area = ST_Area(NEW.geom)::bigint;
ELSIF (srid = 4326) THEN
NEW.area = ST_Area(Geography(NEW.geom))::bigint;
END IF;
END IF;
END IF;

RETURN NEW;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;

CREATE TRIGGER trg_postfire_study_area_UPDATE_dimensoes
BEFORE INSERT OR UPDATE
ON sch_forestal.postfire_study_area
FOR EACH ROW
EXECUTE PROCEDURE fun_dimensoes();

Quando edito a geometria salta o seguinte erro:

ERROR:  no existe el esquema «tg_table_schema»
CONTEXTO:  sentencia SQL: «ALTER TABLE TG_TABLE_SCHEMA.TG_TABLE_NAME ADD
COLUMN area bigint»


Eloi Ribeiro
GIS Analyst
39,45º -0,40º
flavors.me/eloiribeiro
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Limites e performance do Postgres com Postgis

2012-03-07 Por tôpico Eloi Ribeiro
Nestes links estão algumas sugestões de configuração de PostgreSQL para
servir dados espaciais:
http://workshops.opengeo.org/postgis-intro/tuning.html
http://wiki.openstreetmap.org/wiki/Mapnik/PostGIS#Tuning_the_database

Eloi Ribeiro
GIS Analyst
39,45º -0,40º
flavors.me/eloiribeiro
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] tabela de pontos com geometria

2011-10-20 Por tôpico Eloi Ribeiro
>
> > Pessoal alguém pode dizer-me como crio uma tabela de pontos no
> postgresql?
>
> Só olhar na seção de tipos de dados no manual… não tem segredo algum.
>
> Se quiser usar isso para geoprocessamento, já é indicado olhar o PostGIS.



Tenho uma entrada no meu blog de como fazer isso com PostGIS.
Boa sorte,


Eloi Ribeiro
GIS Analyst
39,45º -0,40º
flavors.me/eloiribeiro
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] [ajuda] localização fisica do banco de dados no ubuntu

2011-09-02 Por tôpico Eloi Ribeiro
No ubuntu 10.04 a o directorio de cluster esta em
/var/lib/postgresql/8.4/main/base

Eloi Ribeiro
GIS Analyst
39,45º -0,40º
http://eloiribeiro.wordpress.com


No dia 3 de Setembro de 2011 00:14, Marco Antônio Sari <
marcoantonios...@gmail.com> escreveu:

>
>
> 1- voce quer saber o diretorio da aplicacao PostgreSQL ou o diretorio do
> CLUSTER ?
> 2- Qual o SO ?
>
> abç
>
> 2011/9/2 rogerio dandrea 
>
>> Duvida pra lá de basica, mas não encontrei, onde fica o banco de dados no
>> ubuntu? procuro pelo nome do banco.db ?
>>
>> ___
>> pgbr-geral mailing list
>> pgbr-geral@listas.postgresql.org.br
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>>
>
>
> --
> Marco Antônio Sari
>
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] passar tabelas de um esquema para outro

2011-05-04 Por tôpico Eloi Ribeiro
2011/5/4 JotaComm 
> Sim,
> Porém, assim você para uma única tabela. Eu mostrei nesta thread como fazer 
> para mais de uma tabela ao mesmo tempo.

OK, cool!
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] passar tabelas de um esquema para outro

2011-05-04 Por tôpico Eloi Ribeiro
2011/5/4 Joao Cosme de Oliveira Junior 

> mas e uma opcao, se vc tiver um schema vendas clientes... ai lascou mas
> se tiver algum padrao tranquilo
>


OK, neste caso o nome do esquema nao é comum. Tomo nota da advertencia, nao
me tinha dado conta desse perigo.


2011/5/4 Euler Taveira de Oliveira 
>
> A melhor solução é ALTER TABLE foo SET SCHEMA bar. Soluções com sed podem
> fazer alterações indesejadas (comandos, nome de tabelas, nome de colunas e
> dados do cliente).
>

Basta executar essa sentencia SQL para cada uma das tabelas?

*ALTER TABLE esquema_origem.tabela1 SET SCHEMA esquema_destino;*

Obrigado por todo o aportado!
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] passar tabelas de um esquema para outro

2011-05-04 Por tôpico Eloi Ribeiro
2011/5/4 Fabrízio de Royes Mello 

Se vc realmente deseja *mover* as tabelas vc poderia simplificar da seguinte
> forma:
>
> psql -h localhost -U utilizador bd_nome -A -t -c "select 'ALTER TABLE
> '||quote_ident(table_schema)||'.'||quote_ident(table_name)||' SET SCHEMA
> '||quote_ident('sch_origem')||';' from information_schema.tables where
> table_schema = 'sch_destino' " | psql -h localhost -U utilizador bd_nome
>
> Assim elimina a necessidade de dump/restore.
>
>
> Obs: Da forma como vc apresentou vc está "copiando" o conteúdo de um schema
> para outro... se nao apagar o "sch_origem" da base vc terá ao final os dois.
>

Uahu! Excelente dica Fabrízio. Tomo nota.
Tens razao, fiquei com as dados duplicados, pelo menos até estar seguro que
estaria tudo bem no novo esquema.
Obrigado.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] passar tabelas de um esquema para outro

2011-05-04 Por tôpico Eloi Ribeiro
Olá à lista,

Tive a necessidade de mover umas tabelas (60 aprox.) de um esquema para
outro e fiz da maneira que detalho mais a baixo.

No entanto, sendo um novato nestas andanças, não estou seguro que seja um
procedimento correto e gostaria saber se acarreta algumas implicações
negativas para o desempenho da base de dados.

Estes foram os passos dados:

# dump
/usr/bin/pg_dump --host localhost --port 5432 --username utilizador --format
plain --column-inserts --no-owner --verbose --file "/home/user/ficheiro.sql"
--schema 'sch_origem' bd_nome

# mudar o nome do esquema de origem pelo de destino
sed 's/sch_origem/sch_destino/g' ficheiro.sql>ficheiro2.sql

# subir as tabelas ao novo esquema
psql -h localhost -U utilizador -d bd_nome -f ficheiro2.sql

O que posso dizer é que por agora funciona tudo bem.

Obrigado,

Eloi Ribeiro
GIS Analyst
39,45º -4,40º
http://eloiribeiro.wordpress.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] função: como criar series sem que se multipliquem

2011-04-07 Por tôpico Eloi Ribeiro
2011/4/6 Luiz Matsumura 

> Já que está usando pl/pgsql por que não fazer um loop FOR ?
>
> algo como
>
> FOR i IN 1..100 LOOP
>
>   INSERT INTO sch_ambiente.escv_incendios_puntos_muestreo(  poi_code,
> fir_code, fir_name, geom)
>VALUES ( i , new.fir_code , new.fir_name , (select ) );
>
> END LOOP;
>
>
>
> Em 5 de abril de 2011 05:40, Eloi Ribeiro 
> escreveu:
> > Ola à lista,
> > Tenho o seguinte disparador para quando faço um INSERT de um novo registo
> > (polígono incêndio florestal) me crie 100 pontos regulares noutra tabela.
> > A dificuldade que encontro é em numerar esses pontos de 1 a 100, porque
> cada
> > vez que tento meter um generate_series(1,100) multiplica-me os 100 pontos
> > pela serie (de 1 a 100) e fico com 1 pontos. Entendo que esse seja o
> > resultado lógico, embora não o desejado. Alguém tem uma sugestão para que
> > isto não ocorra?
> >
> > --DROP TRIGGER trg_escv_incendios_todos_subtablas ON
> > sch_ambiente.escv_incendios_todos;
> > --DROP FUNCTION sch_ambiente.trg_escv_incendios_todos_subtablas();
> > CREATE OR REPLACE FUNCTION
> sch_ambiente.trg_escv_incendios_todos_subtablas()
> >   RETURNS trigger AS $BODY$
> > BEGIN
> > IF (TG_OP = 'DELETE') THEN
> > DELETE FROM sch_ambiente.escv_incendios_puntos_muestreo
> > WHERE fir_code = OLD.fir_code;
> > ELSIF (TG_OP = 'UPDATE') OR (TG_OP = 'INSERT') THEN
> > -- elimina anteriores para evitar repetidos
> > DELETE FROM sch_ambiente.escv_incendios_puntos_muestreo
> > WHERE fir_code = NEW.fir_code;
> > -- Puntos de muestreo
> > INSERT INTO sch_ambiente.escv_incendios_puntos_muestreo(   -- poi_code ->
> > CAMPO SERIE DE 1 A 100
> > fir_code,
> > fir_name,
> > geom)
> > (SELECT
> > -- generate_series(1,100) -> SERIE DE 1 A 100
> > NEW.fir_code,
> > NEW.fir_name,
> > t1.geom
> > FROM (SELECT  tx.fir_code,
> > ST_Setsrid(ST_MakePoint(tx.x, ty.y), 23030) AS geom
> > FROM
> > (SELECT NEW.fir_code AS fir_code,
> > generate_series(
> > (SELECT cast(ST_XMin(ST_Envelope(geom_23030)) AS int)
> > FROM sch_ambiente.escv_incendios_todos
> > WHERE fir_code=NEW.fir_code)+((SELECT cast(sqrt(ST_Area(geom_23030)/100)
> AS
> > int)
> > FROM sch_ambiente.escv_incendios_todos
> > WHERE fir_code=NEW.fir_code)/2),
> > (SELECT cast(ST_XMax(ST_Envelope(geom_23030)) AS int)
> > FROM sch_ambiente.escv_incendios_todos
> > WHERE fir_code=NEW.fir_code),
> > (SELECT cast(sqrt(ST_Area(geom_23030)/100) AS int)
> > FROM sch_ambiente.escv_incendios_todos
> > WHERE fir_code=NEW.fir_code)) AS x)
> > AS tx
> > JOIN
> > (SELECT NEW.fir_code AS fir_code,
> > generate_series(
> > (SELECT cast(ST_YMin(ST_Envelope(geom_23030)) AS int)
> > FROM sch_ambiente.escv_incendios_todos
> > WHERE fir_code=NEW.fir_code)+((SELECT cast(sqrt(ST_Area(geom_23030)/100)
> AS
> > int)
> > FROM sch_ambiente.escv_incendios_todos
> > WHERE fir_code=NEW.fir_code)/2),
> > (SELECT cast(ST_YMax(ST_Envelope(geom_23030)) AS int)
> > FROM sch_ambiente.escv_incendios_todos
> > WHERE fir_code=NEW.fir_code),
> > (SELECT cast(sqrt(ST_Area(geom_23030)/100) AS int)
> > FROM sch_ambiente.escv_incendios_todos
> > WHERE fir_code=NEW.fir_code)) AS y)
> > AS ty
> > ON tx.fir_code = ty.fir_code)
> > AS t1,
> > sch_ambiente.escv_incendios_todos AS t2
> > WHERE t2.fir_code = NEW.fir_code
> > AND (t1.geom && t2.geom_23030)
> > AND ST_Intersects(t1.geom, t2.geom_23030))
> > LIMIT 100;
> > END IF;
> > RETURN NULL;
> > END;
> > $BODY$ LANGUAGE plpgsql;
> > CREATE TRIGGER trg_escv_incendios_todos_subtablas
> > AFTER INSERT OR UPDATE OR DELETE ON sch_ambiente.escv_incendios_todos
> > FOR EACH ROW EXECUTE PROCEDURE
> > sch_ambiente.trg_escv_incendios_todos_subtablas();
> > Obrigado,
> > Eloi Ribeiro
>



Obrigado Luiz, tentarei a abordagem sugerida.
Eloi
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] função: como criar series sem que se multipliquem

2011-04-05 Por tôpico Eloi Ribeiro
Ola à lista,

Tenho o seguinte disparador para quando faço um INSERT de um novo registo
(polígono incêndio florestal) me crie 100 pontos regulares noutra tabela.
A dificuldade que encontro é em numerar esses pontos de 1 a 100, porque cada
vez que tento meter um generate_series(1,100) multiplica-me os 100 pontos
pela serie (de 1 a 100) e fico com 1 pontos. Entendo que esse seja o
resultado lógico, embora não o desejado. Alguém tem uma sugestão para que
isto não ocorra?


--DROP TRIGGER trg_escv_incendios_todos_subtablas ON
sch_ambiente.escv_incendios_todos;
--DROP FUNCTION sch_ambiente.trg_escv_incendios_todos_subtablas();

CREATE OR REPLACE FUNCTION sch_ambiente.trg_escv_incendios_todos_subtablas()
  RETURNS trigger AS $BODY$
BEGIN
IF (TG_OP = 'DELETE') THEN
DELETE FROM sch_ambiente.escv_incendios_puntos_muestreo
WHERE fir_code = OLD.fir_code;
 ELSIF (TG_OP = 'UPDATE') OR (TG_OP = 'INSERT') THEN
-- elimina anteriores para evitar repetidos
DELETE FROM sch_ambiente.escv_incendios_puntos_muestreo
WHERE fir_code = NEW.fir_code;
-- Puntos de muestreo
INSERT INTO sch_ambiente.escv_incendios_puntos_muestreo(   -- poi_code ->
CAMPO SERIE DE 1 A 100
fir_code,
fir_name,
geom)
(SELECT
-- generate_series(1,100) -> SERIE DE 1 A 100
NEW.fir_code,
NEW.fir_name,
t1.geom
FROM (SELECT  tx.fir_code,
ST_Setsrid(ST_MakePoint(tx.x, ty.y), 23030) AS geom
FROM
(SELECT NEW.fir_code AS fir_code,
generate_series(
(SELECT cast(ST_XMin(ST_Envelope(geom_23030)) AS int)
FROM sch_ambiente.escv_incendios_todos
WHERE fir_code=NEW.fir_code)+((SELECT cast(sqrt(ST_Area(geom_23030)/100) AS
int)
FROM sch_ambiente.escv_incendios_todos
WHERE fir_code=NEW.fir_code)/2),
(SELECT cast(ST_XMax(ST_Envelope(geom_23030)) AS int)
FROM sch_ambiente.escv_incendios_todos
WHERE fir_code=NEW.fir_code),
(SELECT cast(sqrt(ST_Area(geom_23030)/100) AS int)
FROM sch_ambiente.escv_incendios_todos
WHERE fir_code=NEW.fir_code)) AS x)
AS tx
JOIN
(SELECT NEW.fir_code AS fir_code,
generate_series(
(SELECT cast(ST_YMin(ST_Envelope(geom_23030)) AS int)
FROM sch_ambiente.escv_incendios_todos
WHERE fir_code=NEW.fir_code)+((SELECT cast(sqrt(ST_Area(geom_23030)/100) AS
int)
FROM sch_ambiente.escv_incendios_todos
WHERE fir_code=NEW.fir_code)/2),
(SELECT cast(ST_YMax(ST_Envelope(geom_23030)) AS int)
FROM sch_ambiente.escv_incendios_todos
WHERE fir_code=NEW.fir_code),
(SELECT cast(sqrt(ST_Area(geom_23030)/100) AS int)
FROM sch_ambiente.escv_incendios_todos
WHERE fir_code=NEW.fir_code)) AS y)
AS ty
ON tx.fir_code = ty.fir_code)
AS t1,
sch_ambiente.escv_incendios_todos AS t2
WHERE t2.fir_code = NEW.fir_code
AND (t1.geom && t2.geom_23030)
AND ST_Intersects(t1.geom, t2.geom_23030))
LIMIT 100;
END IF;
RETURN NULL;
END;
$BODY$ LANGUAGE plpgsql;

CREATE TRIGGER trg_escv_incendios_todos_subtablas
AFTER INSERT OR UPDATE OR DELETE ON sch_ambiente.escv_incendios_todos
FOR EACH ROW EXECUTE PROCEDURE
sch_ambiente.trg_escv_incendios_todos_subtablas();

Obrigado,

Eloi Ribeiro
GIS Analyst
39,45º -4,40º
http://eloiribeiro.wordpress.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] duvida com disparador: eliminar registos desactualizados.

2011-03-25 Por tôpico Eloi Ribeiro
2011/3/25 Osvaldo Kussama 

> 2011/3/25, Eloi Ribeiro :
> > On Fri, Mar 25, 2011 at 13:57, Osvaldo Kussama
> > wrote:
> >
> >> 2011/3/25, Eloi Ribeiro :
> >> > Ola a toda a lista,
> >> >
> >> > Tenho uma tabela de *incendios* (com geometria de polígonos) onde se
> >> > encontram os perímetros de incêndios florestais.
> >> > Outra *admin* (com geometria de polígonos) com as divisões
> >> administrativas.
> >> > E uma terceira *resumo* (alfanumérica) onde quero que o seguinte
> >> disparador
> >> > guarde a superfície afectada por incêndio e município.
> >> >
> >> > Até aqui tudo bem, o problema vem quando faça um UPDATE de um
> >> > determinado incêndio, alterando a sua geometria/superfície, o
> disparador
> >> > deve eliminar previamente os registos originados pelo INSERT e
> >> > recalcular
> >> > a superfície afectada por incêndio e município. Não sei como eliminar
> os
> >> > registos desactualizados baseando-me no codigo de incendio
> (fire_code).
> >> >
> >> > -
> >> > -- tabela incendios
> >> > CREATE TABLE sch_temp.incendios (gid SERIAL PRIMARY KEY, fir_code
> >> BIGINT);
> >> > SELECT AddGeometrycolumn
> >> ('sch_temp','incendios','geom',23030,'POLYGON',2);
> >> >
> >> > -- tabela municipios
> >> > CREATE TABLE sch_temp.municipios (adm_code INT, adm_name VARCHAR(50));
> >> > SELECT AddGeometrycolumn
> >> ('sch_temp','municipios','geom',23030,'POLYGON',2);
> >> > INSERT INTO sch_temp.municipios(adm_code,adm_name, geom)
> >> > VALUES(101,'Muni
> >> > a', ST_GeomFromText('SRID=23030;POLYGON((725000 443,73
> >> > 443,73 4425000,725000 443))'));
> >> > INSERT INTO sch_temp.municipios(adm_code,adm_name, geom)
> >> > VALUES(102,'Muni
> >> > b', ST_GeomFromText('SRID=23030;POLYGON((725000 443,73
> >> > 4425000,725000 4425000,725000 443))'));
> >> >
> >> > -- tabela resumo
> >> > CREATE TABLE sch_temp.resumo (id SERIAL PRIMARY KEY, fir_code BIGINT,
> >> > adm_code INT, adm_area BIGINT);
> >> >
> >> > -- disparador
> >> > CREATE OR REPLACE FUNCTION funcao_incendios() RETURNS trigger AS
> >> > $fire_by_admin$
> >> > DECLARE
> >> > fire BIGINT;
> >> > BEGIN
> >> > --fire = NEW.fire_code;   -- <-- RAIZ DO PROBLEMA
> >> > IF (TG_OP = 'DELETE') THEN
> >> > DELETE FROM sch_temp.resumo
> >> > WHERE fir_code = fire;
> >> > ELSIF (TG_OP = 'UPDATE') OR (TG_OP = 'INSERT') THEN
> >> > --DELETE FROM sch_temp.resumo
> >> > --WHERE fir_code = fire;
> >> > INSERT INTO sch_temp.resumo(fir_code, adm_code, adm_area) (
> >> > SELECT t2.fir_code, t1.adm_code,
> >> > sum(ST_Area(ST_Intersection(t1.geom,t2.geom)))
> >> > FROM sch_temp.municipios AS t1, sch_temp.incendios AS t2
> >> > WHERE (t1.geom && t2.geom)
> >> > AND ST_Intersects(t1.geom,t2.geom)
> >> > GROUP BY t2.fir_code, t1.adm_code);
> >> > END IF;
> >> > RETURN NULL;
> >> > END;
> >> > $fire_by_admin$ LANGUAGE plpgsql;
> >> >
> >> > CREATE TRIGGER funcao_incendios
> >> > AFTER INSERT OR UPDATE OR DELETE ON sch_temp.incendios
> >> > FOR EACH ROW EXECUTE PROCEDURE funcao_incendios();
> >> >
> >> > -- insert
> >> > INSERT INTO sch_temp.incendios(fir_code, geom) VALUES(1,
> >> > ST_GeomFromText('SRID=23030;POLYGON((726000 4429000,729000
> >> > 4429000,729000
> >> > 4426000,726000 4426000,726000 4429000))'));
> >> > SELECT * FROM sch_temp.resumo;
> >> >
> >> > -- resultado observado e esperado
> >> > /*fir_code,adm_code,adm_area
> >> > 1;1;101;450
> >> > 2;1;102;450*/
> >> >
> >> > -- update
> >> > UPDATE sch_temp.incendios SET geom =
> >> > ST_GeomFromText('SRID=23030;POLYGON((727000 4429000,729100
> >> > 4429000,729100
> >> > 4427000,727000 4429000))') WHERE gid = 1;
> >> > SELECT * FROM sch_temp.resumo;
> >> >
> >> >

Re: [pgbr-geral] duvida com disparador: eliminar registos desactualizados.

2011-03-25 Por tôpico Eloi Ribeiro
On Fri, Mar 25, 2011 at 13:57, Osvaldo Kussama wrote:

> 2011/3/25, Eloi Ribeiro :
> > Ola a toda a lista,
> >
> > Tenho uma tabela de *incendios* (com geometria de polígonos) onde se
> > encontram os perímetros de incêndios florestais.
> > Outra *admin* (com geometria de polígonos) com as divisões
> administrativas.
> > E uma terceira *resumo* (alfanumérica) onde quero que o seguinte
> disparador
> > guarde a superfície afectada por incêndio e município.
> >
> > Até aqui tudo bem, o problema vem quando faça um UPDATE de um
> > determinado incêndio, alterando a sua geometria/superfície, o disparador
> > deve eliminar previamente os registos originados pelo INSERT e recalcular
> > a superfície afectada por incêndio e município. Não sei como eliminar os
> > registos desactualizados baseando-me no codigo de incendio (fire_code).
> >
> > -
> > -- tabela incendios
> > CREATE TABLE sch_temp.incendios (gid SERIAL PRIMARY KEY, fir_code
> BIGINT);
> > SELECT AddGeometrycolumn
> ('sch_temp','incendios','geom',23030,'POLYGON',2);
> >
> > -- tabela municipios
> > CREATE TABLE sch_temp.municipios (adm_code INT, adm_name VARCHAR(50));
> > SELECT AddGeometrycolumn
> ('sch_temp','municipios','geom',23030,'POLYGON',2);
> > INSERT INTO sch_temp.municipios(adm_code,adm_name, geom) VALUES(101,'Muni
> > a', ST_GeomFromText('SRID=23030;POLYGON((725000 443,73
> > 443,73 4425000,725000 443))'));
> > INSERT INTO sch_temp.municipios(adm_code,adm_name, geom) VALUES(102,'Muni
> > b', ST_GeomFromText('SRID=23030;POLYGON((725000 443,73
> > 4425000,725000 4425000,725000 443))'));
> >
> > -- tabela resumo
> > CREATE TABLE sch_temp.resumo (id SERIAL PRIMARY KEY, fir_code BIGINT,
> > adm_code INT, adm_area BIGINT);
> >
> > -- disparador
> > CREATE OR REPLACE FUNCTION funcao_incendios() RETURNS trigger AS
> > $fire_by_admin$
> > DECLARE
> > fire BIGINT;
> > BEGIN
> > --fire = NEW.fire_code;   -- <-- RAIZ DO PROBLEMA
> > IF (TG_OP = 'DELETE') THEN
> > DELETE FROM sch_temp.resumo
> > WHERE fir_code = fire;
> > ELSIF (TG_OP = 'UPDATE') OR (TG_OP = 'INSERT') THEN
> > --DELETE FROM sch_temp.resumo
> > --WHERE fir_code = fire;
> > INSERT INTO sch_temp.resumo(fir_code, adm_code, adm_area) (
> > SELECT t2.fir_code, t1.adm_code,
> > sum(ST_Area(ST_Intersection(t1.geom,t2.geom)))
> > FROM sch_temp.municipios AS t1, sch_temp.incendios AS t2
> > WHERE (t1.geom && t2.geom)
> > AND ST_Intersects(t1.geom,t2.geom)
> > GROUP BY t2.fir_code, t1.adm_code);
> > END IF;
> > RETURN NULL;
> > END;
> > $fire_by_admin$ LANGUAGE plpgsql;
> >
> > CREATE TRIGGER funcao_incendios
> > AFTER INSERT OR UPDATE OR DELETE ON sch_temp.incendios
> > FOR EACH ROW EXECUTE PROCEDURE funcao_incendios();
> >
> > -- insert
> > INSERT INTO sch_temp.incendios(fir_code, geom) VALUES(1,
> > ST_GeomFromText('SRID=23030;POLYGON((726000 4429000,729000 4429000,729000
> > 4426000,726000 4426000,726000 4429000))'));
> > SELECT * FROM sch_temp.resumo;
> >
> > -- resultado observado e esperado
> > /*fir_code,adm_code,adm_area
> > 1;1;101;450
> > 2;1;102;450*/
> >
> > -- update
> > UPDATE sch_temp.incendios SET geom =
> > ST_GeomFromText('SRID=23030;POLYGON((727000 4429000,729100 4429000,729100
> > 4427000,727000 4429000))') WHERE gid = 1;
> > SELECT * FROM sch_temp.resumo;
> >
> > -- resultado observado
> > /*fir_code,adm_code,adm_area
> > 1;1;101;450  <- este registe devia ser eliminado, vem do INSERT
> > 2;1;102;450  <- este registe devia ser eliminado, vem do INSERT
> > 3;1;101;210*/
> >
> > -- resultado esperado
> > /*fir_code,adm_code,adm_area
> > 3;1;101;210*/
> >
> > -- eliminar todo o anterior
> > /*DROP TRIGGER IF EXISTS funcao_incendios ON sch_temp.incendios;
> > SELECT DropGeometryColumn('sch_temp','incendios','geom');
> > SELECT DropGeometryColumn('sch_temp','municipios','geom');
> > DROP TABLE sch_temp.resumo;
> > DROP TABLE sch_temp.municipios;
> > DROP TABLE sch_temp.incendios;*/
> > -
> >
>
>
> Não sei se é apenas um erro de digitação mas o campo fire_code em sua
> tabela incendios.
> Talvez deva ser fir_cod.
>
> Outro detalhe é que no caso da operação DELETE o campo NEW.fir_code
> contém NULL, para sua função ter sentido você precisa se referir a
> OLD.fir_code.
>
> Osvaldo
>


Sim estava mal, substitui o *fire_code* por *fir_code*.

Se ponho assim: ERROR: error de sintaxis en o cerca de «SELECT»
*fire = SELECT fir_cod FROM sch_temp.incendios WHERE NEW.geom = OLD.geom;*

Desta maneira da-me: ERROR:  el registro «old» no ha sido asignado aún
*fire = OLD.fir_code;*

Não sei como definir o *fir_code* que devem ser eliminados.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] duvida com disparador: eliminar registos desactualizados.

2011-03-25 Por tôpico Eloi Ribeiro
Ola a toda a lista,

Tenho uma tabela de *incendios* (com geometria de polígonos) onde se
encontram os perímetros de incêndios florestais.
Outra *admin* (com geometria de polígonos) com as divisões administrativas.
E uma terceira *resumo* (alfanumérica) onde quero que o seguinte disparador
guarde a superfície afectada por incêndio e município.

Até aqui tudo bem, o problema vem quando faça um UPDATE de um
determinado incêndio, alterando a sua geometria/superfície, o disparador
deve eliminar previamente os registos originados pelo INSERT e recalcular
a superfície afectada por incêndio e município. Não sei como eliminar os
registos desactualizados baseando-me no codigo de incendio (fire_code).

-
-- tabela incendios
CREATE TABLE sch_temp.incendios (gid SERIAL PRIMARY KEY, fir_code BIGINT);
SELECT AddGeometrycolumn ('sch_temp','incendios','geom',23030,'POLYGON',2);

-- tabela municipios
CREATE TABLE sch_temp.municipios (adm_code INT, adm_name VARCHAR(50));
SELECT AddGeometrycolumn ('sch_temp','municipios','geom',23030,'POLYGON',2);
INSERT INTO sch_temp.municipios(adm_code,adm_name, geom) VALUES(101,'Muni
a', ST_GeomFromText('SRID=23030;POLYGON((725000 443,73
443,73 4425000,725000 443))'));
INSERT INTO sch_temp.municipios(adm_code,adm_name, geom) VALUES(102,'Muni
b', ST_GeomFromText('SRID=23030;POLYGON((725000 443,73
4425000,725000 4425000,725000 443))'));

-- tabela resumo
CREATE TABLE sch_temp.resumo (id SERIAL PRIMARY KEY, fir_code BIGINT,
adm_code INT, adm_area BIGINT);

-- disparador
CREATE OR REPLACE FUNCTION funcao_incendios() RETURNS trigger AS
$fire_by_admin$
DECLARE
fire BIGINT;
BEGIN
--fire = NEW.fire_code;   -- <-- RAIZ DO PROBLEMA
IF (TG_OP = 'DELETE') THEN
DELETE FROM sch_temp.resumo
WHERE fir_code = fire;
ELSIF (TG_OP = 'UPDATE') OR (TG_OP = 'INSERT') THEN
--DELETE FROM sch_temp.resumo
--WHERE fir_code = fire;
INSERT INTO sch_temp.resumo(fir_code, adm_code, adm_area) (
SELECT t2.fir_code, t1.adm_code,
sum(ST_Area(ST_Intersection(t1.geom,t2.geom)))
FROM sch_temp.municipios AS t1, sch_temp.incendios AS t2
WHERE (t1.geom && t2.geom)
AND ST_Intersects(t1.geom,t2.geom)
GROUP BY t2.fir_code, t1.adm_code);
END IF;
RETURN NULL;
END;
$fire_by_admin$ LANGUAGE plpgsql;

CREATE TRIGGER funcao_incendios
AFTER INSERT OR UPDATE OR DELETE ON sch_temp.incendios
FOR EACH ROW EXECUTE PROCEDURE funcao_incendios();

-- insert
INSERT INTO sch_temp.incendios(fir_code, geom) VALUES(1,
ST_GeomFromText('SRID=23030;POLYGON((726000 4429000,729000 4429000,729000
4426000,726000 4426000,726000 4429000))'));
SELECT * FROM sch_temp.resumo;

-- resultado observado e esperado
/*fir_code,adm_code,adm_area
1;1;101;450
2;1;102;450*/

-- update
UPDATE sch_temp.incendios SET geom =
ST_GeomFromText('SRID=23030;POLYGON((727000 4429000,729100 4429000,729100
4427000,727000 4429000))') WHERE gid = 1;
SELECT * FROM sch_temp.resumo;

-- resultado observado
/*fir_code,adm_code,adm_area
1;1;101;450  <- este registe devia ser eliminado, vem do INSERT
2;1;102;450  <- este registe devia ser eliminado, vem do INSERT
3;1;101;210*/

-- resultado esperado
/*fir_code,adm_code,adm_area
3;1;101;210*/

-- eliminar todo o anterior
/*DROP TRIGGER IF EXISTS funcao_incendios ON sch_temp.incendios;
SELECT DropGeometryColumn('sch_temp','incendios','geom');
SELECT DropGeometryColumn('sch_temp','municipios','geom');
DROP TABLE sch_temp.resumo;
DROP TABLE sch_temp.municipios;
DROP TABLE sch_temp.incendios;*/
-

Obrigado,

Eloi Ribeiro
GIS Analyst
39,45º -4,40º
http://eloiribeiro.wordpress.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] consulta SQL que devolva uma lista com todos os dias de um determinado mês

2011-03-14 Por tôpico Eloi Ribeiro
2011/3/14 Emerson Hermann 

> Se ainda servir ...
>
>  SELECT dia::date
>FROM (
>   SELECT (to_date('2011-03','-MM')+s.a*'1
> day'::INTERVAL) AS dia
> FROM generate_series(0, (date_trunc('MONTH',
> to_date('2011/03', '/MM')) + INTERVAL '1 MONTH - 1 day')::date -
> to_date('2011/03', '/MM'), 1
>  ) AS s(a)) x
>
> Em 14 de março de 2011 07:36, Fabrízio de Royes Mello
>  escreveu:
> >
> > Em 14 de março de 2011 07:13, Eloi Ribeiro 
> > escreveu:
> >>
> >> Ola a toda a lista,
> >> É possível criar uma consulta SQL que devolva uma lista com todos os
> dias
> >> de um determinado mês?
> >> De momento apenas consegui chegar até aqui, tendo como exemplo o mês de
> >> Fevereiro de 2011:
> >> SELECT
> >> to_date('2011/02', '/MM'),
> >> (date_trunc('MONTH', to_date('2011/02', '/MM')) + INTERVAL '1
> >> MONTH - 1 day')::date;
> >> O resultado da anterior consulta é o primeiro e ultimo dia do mês:
> >> "2011-02-01";"2011-02-28"
> >> Resultado pretendido é o seguinte:
> >> "2011-02-01"
> >> "2011-02-02"
> >> "2011-02-03"
> >> (...)
> >> "2011-02-26"
> >> "2011-02-27"
> >> "2011-02-28"
> >
> > Veja se isso resolve:
> > select '2011-02-01'::date + dia
> >   from generate_series(0, extract( day from (('2011-02-01'::date + '1
> > month'::interval)::date - 1::integer))::integer - 1) as dia;
> >
> > Cordialmente,
> > --
> > Fabrízio de Royes Mello
> >>> Blog sobre TI: http://fabriziomello.blogspot.com
> >>> Perfil Linkedin: http://br.linkedin.com/in/fabriziomello
> >
> > ___
> > pgbr-geral mailing list
> > pgbr-geral@listas.postgresql.org.br
> > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
> >
> >
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>


Assim fica bastante simples:

SELECT * FROM generate_series('2011-02-01'::date,'2011-03-01'::date-1, '1
day');

Obrigado a todos,

Eloi Ribeiro
GIS Analyst
39,45º -4,40º
http://eloiribeiro.wordpress.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] consulta SQL que devolva uma lista com todos os dias de um determinado mês

2011-03-14 Por tôpico Eloi Ribeiro
2011/3/14 Fabrízio de Royes Mello 

>
> Em 14 de março de 2011 07:13, Eloi Ribeiro escreveu:
>
> Ola a toda a lista,
>>
>> É possível criar uma consulta SQL que devolva uma lista com todos os dias
>> de um determinado mês?
>> De momento apenas consegui chegar até aqui, tendo como exemplo o mês de
>> Fevereiro de 2011:
>> SELECT
>> to_date('2011/02', '/MM'),
>> (date_trunc('MONTH', to_date('2011/02', '/MM')) + INTERVAL '1
>> MONTH - 1 day')::date;
>>
>> O resultado da anterior consulta é o primeiro e ultimo dia do mês:
>> "2011-02-01";"2011-02-28"
>>
>> Resultado pretendido é o seguinte:
>> "2011-02-01"
>> "2011-02-02"
>> "2011-02-03"
>> (...)
>> "2011-02-26"
>> "2011-02-27"
>> "2011-02-28"
>>
>>
> Veja se isso resolve:
>
> select '2011-02-01'::date + dia
>   from generate_series(0, extract( day from (('2011-02-01'::date + '1
> month'::interval)::date - 1::integer))::integer - 1) as dia;
>
>
> Cordialmente,
>
> --
> Fabrízio de Royes Mello
> >> Blog sobre TI: http://fabriziomello.blogspot.com
> >> Perfil Linkedin: http://br.linkedin.com/in/fabriziomello
>
>
Muito obrigado Fabrízio, solucionado!

Eloi Ribeiro
GIS Analyst
39,45º -4,40º
http://eloiribeiro.wordpress.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] consulta SQL que devolva uma lista com todos os dias de um determinado mês

2011-03-14 Por tôpico Eloi Ribeiro
Ola a toda a lista,

É possível criar uma consulta SQL que devolva uma lista com todos os dias de
um determinado mês?
De momento apenas consegui chegar até aqui, tendo como exemplo o mês de
Fevereiro de 2011:
SELECT
to_date('2011/02', '/MM'),
(date_trunc('MONTH', to_date('2011/02', '/MM')) + INTERVAL '1 MONTH
- 1 day')::date;

O resultado da anterior consulta é o primeiro e ultimo dia do mês:
"2011-02-01";"2011-02-28"

Resultado pretendido é o seguinte:
"2011-02-01"
"2011-02-02"
"2011-02-03"
(...)
"2011-02-26"
"2011-02-27"
"2011-02-28"

Obrigado,

Eloi Ribeiro
GIS Analyst
39,45º -4,40º
http://eloiribeiro.wordpress.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] tratar nulls como zeros

2011-03-08 Por tôpico Eloi Ribeiro
Fantastico, era isso mesmo.
Obrigado!

Eloi Ribeiro
GIS Analyst
39,45º -4,40º
http://eloiribeiro.wordpress.com


2011/3/8 Tiago Adami 

> Em 8 de março de 2011 12:50, Eloi Ribeiro 
> escreveu:
> > Olá à lista,
> > Como faço para evitar resultados null de esta seleçao:
> > SELECT c0-(c1+c2+c3+c4) FROM t1;
> > c0;c1;c2;c3;c4
> > "07:01:13";"";"";"";""
> > "06:50:22";"";"";"";""
> > "07:09:11";"";"";"";""
> > "07:28:58";"00:28:00";"";"";""
> > "11:19:04";"";"";"";"01:33:00"
> > "08:09:24";"";"";"00:27:46";""
> > "06:44:13";"";"03:40:36";"";""
> > "07:01:47";"";"";"";""
> > "07:06:07";"00:14:00";"";"";""
> > "07:59:49";"";"";"00:30:16";""
> > "07:00:38";"";"";"";""
> > "11:05:59";"";"";"00:35:49";""
> > "07:05:39";"";"";"";""
> > "06:50:45";"00:14:00";"";"";""
> > "07:12:36";"";"";"";""
> > "07:24:36";"";"";"";""
> > "10:26:16";"";"";"00:32:46";""
> > "09:03:10";"";"";"01:50:19";""
> > "06:56:40";"";"";"";""
> > "08:06:59";"";"";"00:24:06";""
> > Gostaria que o resultado de 10:00:00-(01:00:00+null+null+null) = 09:00:00
> > Obrigado,
> >
>
> Primeiro você precisa definir qual o valor irá substituir os nulos. Se
> for usar a hora zero ( 00:00:00 ), tente a função COALESCE para cada
> uma das colunas:
>
> SELECT
> COALESCE(c0,'00:00:00')-(COALESCE(c1,'00:00:00')+COALESCE(c2,'00:00:00')+COALESCE(c3,'00:00:00')+COALESCE(c4,'00:00:00'))
> FROM t1;
>
>
> --
> TIAGO J. ADAMI
> http://www.adamiworks.com
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] tratar nulls como zeros

2011-03-08 Por tôpico Eloi Ribeiro
Olá à lista,

Como faço para evitar resultados null de esta seleçao:

SELECT c0-(c1+c2+c3+c4) FROM t1;

c0;c1;c2;c3;c4
"07:01:13";"";"";"";""
"06:50:22";"";"";"";""
"07:09:11";"";"";"";""
"07:28:58";"00:28:00";"";"";""
"11:19:04";"";"";"";"01:33:00"
"08:09:24";"";"";"00:27:46";""
"06:44:13";"";"03:40:36";"";""
"07:01:47";"";"";"";""
"07:06:07";"00:14:00";"";"";""
"07:59:49";"";"";"00:30:16";""
"07:00:38";"";"";"";""
"11:05:59";"";"";"00:35:49";""
"07:05:39";"";"";"";""
"06:50:45";"00:14:00";"";"";""
"07:12:36";"";"";"";""
"07:24:36";"";"";"";""
"10:26:16";"";"";"00:32:46";""
"09:03:10";"";"";"01:50:19";""
"06:56:40";"";"";"";""
"08:06:59";"";"";"00:24:06";""

Gostaria que o resultado de 10:00:00-(01:00:00+null+null+null) = 09:00:00

Obrigado,

Eloi Ribeiro
GIS Analyst
39,45º -4,40º
http://eloiribeiro.wordpress.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] consulta de agregaçao (GROUP BY ) e com uma restriçao WHERE?

2010-12-20 Por tôpico Eloi Ribeiro
Ok, assim já funciona.

SELECT count(x) FROM tabela GROUP BY x HAVING count(x)>1;

Obrigado Victor!
[]´s

Eloi Ribeiro
GIS Analyst
39,45º -4,40º
http://eloiribeiro.wordpress.com


2010/12/20 Victor Hugo 

> Neste exemplo que vc passou seria melhor vc utilizar having.
>
> SELECT count(x) FROM tabela HAVING count(x)>1 GROUP BY x;
>
> []´s
> Victor Hugo
>
> Em 20 de dezembro de 2010 11:36, Eloi Ribeiro 
> escreveu:
>
>> Ola à lista,
>>
>> Como posso fazer uma consulta de agregação (GROUP BY) e com uma restrição
>> tipo WHERE?
>> Exemplo:
>>
>> SELECT count(x) FROM tabela WHERE count(x)>1 GROUP BY x;
>>
>> Obrigado!
>>
>> Eloi Ribeiro
>> GIS Analyst
>> 39,45º -4,40º
>> http://eloiribeiro.wordpress.com
>>
>> ___
>> pgbr-geral mailing list
>> pgbr-geral@listas.postgresql.org.br
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>>
>
>
> --
> []´s
> Victor Hugo
>
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] consulta de agregaçao (GROUP BY ) e com uma restriçao WHERE?

2010-12-20 Por tôpico Eloi Ribeiro
Ola à lista,

Como posso fazer uma consulta de agregação (GROUP BY) e com uma restrição
tipo WHERE?
Exemplo:

SELECT count(x) FROM tabela WHERE count(x)>1 GROUP BY x;

Obrigado!

Eloi Ribeiro
GIS Analyst
39,45º -4,40º
http://eloiribeiro.wordpress.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] ajuda com disparador

2010-11-17 Por tôpico Eloi Ribeiro
0267.75646057,675714.208368959 4207910.10029429)";"LINESTRING(-6 38,-1
38)"

*Testando UPDATE:*
UPDATE sch_temp.teste SET geom_23030 =
ST_GeomFromText('SRID=23030;LINESTRING(25 470,705000 470)')
WHERE gid = 1;
UPDATE sch_temp.teste SET geom_4258 =
ST_GeomFromText('SRID=4258;LINESTRING(-5 37,-1 37)') WHERE gid = 2;
SELECT gid, longitude, ST_AsText(geom_23030), ST_AsText(geom_4258) FROM
sch_temp.teste;
--1;455000;"LINESTRING(25 470,705000
470)";"LINESTRING(-6.03947581959512 42.4101587355779,-0.509472631922339
42.4233762846083)"
--2;355923.537746918;"LINESTRING(322150.259231365
4096946.77669013,678073.796964852 4096949.86875352)";"LINESTRING(-5 37,-1
37)"

Cumprimentos,

Eloi Ribeiro
GIS Analyst
39,45º -4,40º
http://eloiribeiro.wordpress.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] ajuda com disparador

2010-11-16 Por tôpico Eloi Ribeiro
On Tue, Nov 16, 2010 at 21:02, Osvaldo Kussama wrote:

> Em 16 de novembro de 2010 17:22, Eloi Ribeiro 
> escreveu:
> >
> > Com esta ultima alteração os resultados são os mesmos.
> > Nao existe nenhuma outra dependência, ao actualizar  uma coordenada a
> > outra deve ser automaticamente modificada.
> > Eloi
>
>
> IF (NEW.x100 IS NOT NULL) THEN
>  NEW.x = NEW.x100/100;
> END IF;
>
> É isso? Calcular um novo x em função de x100?
>
> 
>
> CREATE OR REPLACE FUNCTION funcao_teste() RETURNS trigger AS
> $$
> BEGIN
> IF (TG_OP = 'INSERT') THEN
>IF (NEW.x IS NOT NULL) THEN
>NEW.x100 = NEW.x*100;
>ELSE
>NEW.x = NEW.x100/100;
>END IF;
> ELSE
>IF (TG_OP = 'UPDATE') THEN
>IF (NEW.x IS NOT NULL) THEN
>NEW.x100 = NEW.x*100;
>ELSE
> IF (NEW.x100 IS NOT NULL) THEN
> NEW.x = NEW.x100/100;
> END IF;
>END IF;
>END IF;
> END IF;
> RETURN NEW;
> END;
> $$ LANGUAGE plpgsql;
>
>
> Osvaldo
> __
>

Tens razão tinha ai um erro, mas mesmo assim com ultimo UPDATE (ver mais a
baixo) não se obtém o resultado esperado.
Não entendo o que está mal...

INSERT INTO sch_temp.teste(x) VALUES(1);
INSERT INTO sch_temp.teste(x100) VALUES (200);
SELECT * FROM sch_temp.teste;
1;1;100
2;2;200
Resultado esperado.

UPDATE sch_temp.teste SET x = 3 WHERE x = 2;
SELECT * FROM sch_temp.teste;
1;1;100
2;3;300
Resultado esperado.

UPDATE sch_temp.teste SET x100 = 200 WHERE x = 3;
SELECT * FROM sch_temp.teste;
1;1;100
2;3;300
Resultado NÃO esperado. Deveria ser:
1;1;100
2;2;200


Eloi
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] ajuda com disparador

2010-11-16 Por tôpico Eloi Ribeiro
On Tue, Nov 16, 2010 at 19:34, Osvaldo Kussama wrote:

> Em 16 de novembro de 2010 14:33, Eloi Ribeiro 
> escreveu:
> >
> > Obrigado Osvaldo, era isso mesmo que queria fazer.
> > Apenas nao funciona o ultimo UPDATE.
> > Simplificando o exemplo anterior:
> > --DROP TABLE sch_temp.teste;
> > CREATE TABLE sch_temp.teste (id serial primary key, x int, x100 int);
> > CREATE OR REPLACE FUNCTION funcao_teste() RETURNS trigger AS
> > $$
> > BEGIN
> > IF (TG_OP = 'INSERT') THEN
> >IF (NEW.x IS NOT NULL) THEN
> >NEW.x100 = NEW.x*100;
> >ELSE
> >NEW.x = NEW.x100/100;
> >END IF;
> > ELSE
> >IF (TG_OP = 'UPDATE') THEN
> >IF (NEW.x IS NOT NULL) THEN
> >NEW.x100 = NEW.x*100;
> >ELSE
> >IF (OLD.x100 IS NOT NULL) THEN
> >   NEW.x = NEW.x/100;
> > END IF;
> >END IF;
> > END IF;
> > END IF;
> > RETURN NEW;
> > END;
> > $$ LANGUAGE plpgsql;
> > DROP TRIGGER IF EXISTS funcao_teste ON sch_temp.teste;
> > CREATE TRIGGER funcao_teste BEFORE INSERT OR UPDATE ON sch_temp.teste FOR
> > EACH ROW EXECUTE PROCEDURE funcao_teste();
> > INSERT INTO sch_temp.teste(x) VALUES(1);
> > INSERT INTO sch_temp.teste(x100) VALUES (200);
> > SELECT * FROM sch_temp.teste;
> > 1;1;100
> > 2;2;200
> > Os INSERTS funcionam na perfeição.
> > UPDATE sch_temp.teste SET x = 3 WHERE x = 2;
> > SELECT * FROM sch_temp.teste;
> > 1;1;100
> > 2;3;300
> > O primeiro UPDATE também.
> > UPDATE sch_temp.teste SET x100 = 200 WHERE x = 3;
> > SELECT * FROM sch_temp.teste;
> > 1;1;100
> > 2;3;300
> > Excepto este ultimo que não dispara. Porque?
> > Aqui o resultado deveria ser:
> > 1;1;100
> > 2;2;200
> > Obrigado por toda a ajuda.
> > Eloi
>
>
> Creio que você precisa rever quais testes devem ser feitos.
> Talvez:
> IF (OLD.x100 IS NOT NULL) THEN
>  NEW.x = NEW.x/100;
> END IF;
> deva, na realidade ser:
> IF (NEW.x100 IS NOT NULL) THEN
>   NEW.x = NEW.x/100;
> END IF;
>
> Eu não entendi muito bem se sempre que atualizar uma coordenada a
> outra deve ser automaticamente modificada ou se isto depende de alguma
> outra informação ou pré-existência de dados.
>
> Osvaldo
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>


Com esta ultima alteração os resultados são os mesmos.
Nao existe nenhuma outra dependência, ao actualizar  uma coordenada a
outra deve ser automaticamente modificada.

Eloi
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] ajuda com disparador

2010-11-16 Por tôpico Eloi Ribeiro
2010/11/16 Osvaldo Kussama 

> Em 15 de novembro de 2010 14:38, Eloi Ribeiro 
> escreveu:
> > Olá à lista,
> > Queria fazer um disparador sobre uma tabela com dois campos do
> > tipo 'Geometry' (geom_23030 e geom_4258) cada um com um sistema de
> > coordenadas diferente.
> > A ideia era que o disparador actualiza-se o segundo campo sempre que
> > houvesse um INSERT ou UPDATE no primeiro campo e assim tivessem sempre a
> > mesma geometria mas cada um dos campos com o seu respectivo sistemas de
> > coordenadas.
> > Devido à minha falta de experiência em plpgsql eu não sei como fazer para
> > que o disparador reconheça qual a geometria mais recente e proceder com
> > a actualização da mais antiga. Como tenho feito, actualiza por ordem de
> como
> > está indicado no disparador sem ter em conta a antiguidade. Deveria
> > adicionar dois novos campos com Time Stamp de cada uma das geometrias
> para
> > conseguir o meu objectivo?
> > Estou a usar algumas das funções disponibilizadas pela extensão PostGIS.
> > Isto foi o que consegui fazer:
> > --SELECT DropGeometryColumn('sch_temp','teste','geom_23030');
> > --SELECT DropGeometryColumn('sch_temp','teste','geom_4258');
> > --DROP TABLE sch_temp.teste;
> > CREATE TABLE sch_temp.teste (gid serial primary key, longitude double
> > precision);
> > SELECT AddGeometrycolumn
> > ('sch_temp','teste','geom_23030',23030,'LINESTRING',2);
> > SELECT AddGeometrycolumn
> > ('sch_temp','teste','geom_4258',4258,'LINESTRING',2);
> > CREATE OR REPLACE FUNCTION funcao_teste() RETURNS trigger AS
> > $$
> > BEGIN
> > -- Se o campo geom_4258 tem um novo INSERT ou UPDATE, entao actualiza
> > geom_23030.
> > NEW.geom_23030 = ST_Transform((NEW.geom_4258), 23030);
> >
> > -- Se o campo geom_23030 tem um novo INSERT ou UPDATE, entao actualiza
> > geom_4258.
> > NEW.geom_4258 = ST_Transform((NEW.geom_23030), 4258);
> > -- Calcula/actualiza a longitude da geometria.
> > NEW.longitude  = ST_Length(NEW.geom_23030);
> > RETURN NEW;
> > END;
> > $$ LANGUAGE plpgsql;
> > DROP TRIGGER IF EXISTS funcao_teste ON sch_temp.teste;
> > CREATE TRIGGER funcao_teste BEFORE INSERT OR UPDATE ON sch_temp.teste FOR
> > EACH ROW EXECUTE PROCEDURE funcao_teste();
> > INSERT INTO sch_temp.teste(geom_23030)
> > VALUES(ST_GeomFromText('SRID=23030;LINESTRING(232400 4548000,700882
> > 4548000)'));
> > INSERT INTO sch_temp.teste(geom_4258) VALUES
> > (ST_GeomFromText('SRID=4258;LINESTRING(-6 38,-1 38)'));
> > UPDATE sch_temp.teste SET geom_4258 =
> > ST_GeomFromText('SRID=4258;LINESTRING(-5 37,-1 37)') WHERE gid = 2;
> > SELECT gid, longitude, ST_AsText(geom_23030), ST_AsText(geom_4258) FROM
> > sch_temp.teste;
> > Obrigado. Cumprimentos,
> >
>
>
> Pelo que entendi você deve:
> - verificar qual é a operação (TG_OP);
> - se for INSERT, verificar em NEW qual foi a informada e calcular a
> outra, colocando o resultado em NEW;
> - se for UPDATE, verificar qual foi alterada e calcular a que não foi
> alterada, colocando o resultado em NEW;
>
> CREATE OR REPLACE FUNCTION funcao_teste() RETURNS trigger AS
> $$
> BEGIN
> IF (TG_OP = 'INSERT') THEN
>IF (NEW.geom_4258 IS NOT NULL) THEN
>-- Se o campo geom_4258 tem um novo INSERT, entao actualiza
> geom_23030.
> NEW.geom_23030 = ST_Transform((NEW.geom_4258), 23030);
> ELSE
>-- Se o campo geom_23030 tem um novo INSERT, entao actualiza
> geom_4258.
> NEW.geom_4258 = ST_Transform((NEW.geom_23030), 4258);
> END IF;
> ELSE
>IF (TG_OP = 'UPDATE') THEN
>IF (NEW.geom_4258 IS NOT NULL) THEN
> NEW.geom_23030 = ST_Transform((NEW.geom_4258),
> 23030);
> ELSE
>IF (OLD.geom_23030 IS NOT NULL) THEN
> NEW.geom_4258 =
> ST_Transform((NEW.geom_23030), 4258);
> END IF;
>END IF;
> END IF;
> RETURN NEW;
> END;
> $$ LANGUAGE plpgsql;
>
> ou algo nesta linha.
>
> Osvaldo
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>


Obrigado Osvaldo, era isso mesmo que queria fazer.
Apenas nao funciona o ultimo UPDATE.
Simplificando o exemplo anterior:

--DROP TABLE sch_t

[pgbr-geral] ajuda com disparador

2010-11-15 Por tôpico Eloi Ribeiro
Olá à lista,

Queria fazer um disparador sobre uma tabela com dois campos do
tipo 'Geometry' (geom_23030 e geom_4258) cada um com um sistema de
coordenadas diferente.

A ideia era que o disparador actualiza-se o segundo campo sempre que
houvesse um INSERT ou UPDATE no primeiro campo e assim tivessem sempre a
mesma geometria mas cada um dos campos com o seu respectivo sistemas de
coordenadas.

Devido à minha falta de experiência em plpgsql eu não sei como fazer para
que o disparador reconheça qual a geometria mais recente e proceder com
a actualização da mais antiga. Como tenho feito, actualiza por ordem de como
está indicado no disparador sem ter em conta a antiguidade. Deveria
adicionar dois novos campos com Time Stamp de cada uma das geometrias para
conseguir o meu objectivo?

Estou a usar algumas das funções disponibilizadas pela extensão PostGIS.
Isto foi o que consegui fazer:

--SELECT DropGeometryColumn('sch_temp','teste','geom_23030');
--SELECT DropGeometryColumn('sch_temp','teste','geom_4258');
--DROP TABLE sch_temp.teste;

CREATE TABLE sch_temp.teste (gid serial primary key, longitude double
precision);
SELECT AddGeometrycolumn
('sch_temp','teste','geom_23030',23030,'LINESTRING',2);
SELECT AddGeometrycolumn
('sch_temp','teste','geom_4258',4258,'LINESTRING',2);

CREATE OR REPLACE FUNCTION funcao_teste() RETURNS trigger AS
$$
BEGIN

-- Se o campo geom_4258 tem um novo INSERT ou UPDATE, entao actualiza
geom_23030.
NEW.geom_23030 = ST_Transform((NEW.geom_4258), 23030);

-- Se o campo geom_23030 tem um novo INSERT ou UPDATE, entao actualiza
geom_4258.
NEW.geom_4258 = ST_Transform((NEW.geom_23030), 4258);

-- Calcula/actualiza a longitude da geometria.
NEW.longitude  = ST_Length(NEW.geom_23030);

RETURN NEW;
END;
$$ LANGUAGE plpgsql;

DROP TRIGGER IF EXISTS funcao_teste ON sch_temp.teste;
CREATE TRIGGER funcao_teste BEFORE INSERT OR UPDATE ON sch_temp.teste FOR
EACH ROW EXECUTE PROCEDURE funcao_teste();

INSERT INTO sch_temp.teste(geom_23030)
VALUES(ST_GeomFromText('SRID=23030;LINESTRING(232400 4548000,700882
4548000)'));
INSERT INTO sch_temp.teste(geom_4258) VALUES
(ST_GeomFromText('SRID=4258;LINESTRING(-6 38,-1 38)'));
UPDATE sch_temp.teste SET geom_4258 =
ST_GeomFromText('SRID=4258;LINESTRING(-5 37,-1 37)') WHERE gid = 2;

SELECT gid, longitude, ST_AsText(geom_23030), ST_AsText(geom_4258) FROM
sch_temp.teste;

Obrigado. Cumprimentos,


Eloi Ribeiro
GIS Analyst
39,45º -4,40º
http://eloiribeiro.wordpress.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] ajuda com consulta sql

2010-11-03 Por tôpico Eloi Ribeiro
Genial!

Com 'DISTINCT ON (iso3166_2)' devolve apenas um registo por pais
e com 'ORDER BY iso3166_2,  area DESC ' devolve apenas a área de maior
valor.

Muito bem. Muito obrigado, solucionado!


Eloi Ribeiro
GIS Analyst
39,45º -4,40º
http://eloiribeiro.wordpress.com

On Wed, Nov 3, 2010 at 13:08, Fabrízio de Royes Mello <
fabriziome...@gmail.com> wrote:

>
>
> 2010/11/3 Eloi Ribeiro 
>
>>
>> 
>>
>> SELECT * FROM vw_globalfires_country_biome_max02;
>> "AD";"Temperate Broadleaf and Mixed Forests";0.0520229
>> "AE";"Deserts and Xeric Shrublands";6.20797
>> "AF";"Deserts and Xeric Shrublands";49.9593
>> "AG";"Deserts and Xeric Shrublands";0.0279382
>> (...)
>>
>>
>>
> Veja se resolve:
>
> SELECT DISTINCT ON (iso3166_2)
>iso3166_2,
>biome,
>area
>   FROM vw_globalfires_country_biome
>  ORDER BY iso3166_2,
>   area DESC ;
>
> --
> Fabrízio de Royes Mello
> >> Blog sobre TI: http://fabriziomello.blogspot.com
> >> Perfil Linkedin: http://br.linkedin.com/in/fabriziomello
>
>
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] ajuda com consulta sql

2010-11-03 Por tôpico Eloi Ribeiro
Olá a todos,

Tenho uma vista com dados da soma da superfície de Biomas por Pais. Com os
seguintes campos:
iso3166_2 -> codigo de pais
biome  -> bioma
area-> superficie que ocupa esse bioma

SELECT * FROM vw_globalfires_country_biome;
"AD";"Temperate Broadleaf and Mixed Forests";0.0520229
"AE";"Deserts and Xeric Shrublands";6.20797
"AE";"Temperate Grasslands + Savannas + Shrublands";0.00838532
"AF";"Deserts and Xeric Shrublands";49.9593
"AF";"Montane Grasslands and Shrublands";10.8551
"AF";"Temperate Coniferous Forests";1.26231
"AG";"Deserts and Xeric Shrublands";0.0279382
"AG";"Tropical and Subtropical Dry Broadleaf Forests";0.00611668
"AG";"Tropical and Subtropical Moist Broadleaf Forests";0.00229229
(...)

Gostaria criar uma vista a partir da anterior onde aparecessem apenas os
biomas com maior área por pais.
A única maneira que encontro, è primeiro criar uma vista intermédia e a
partir de esta criar a definitiva, mas parece-me uma solução pouco elegante.
Algum me poderia indicar como criar esta vista sem uma vista/tabela
intermédia?

Esta foi a solução (pouco elegante) que encontrei:

CREATE OR REPLACE VIEW vw_globalfires_country_biome_max01 AS
 SELECT iso3166_2, max(area) AS area
   FROM vw_globalfires_country_biome
  GROUP BY iso3166_2;

CREATE OR REPLACE VIEW vw_globalfires_country_biome_max02 AS
 SELECT a.iso3166_2, b.biome, a.area
   FROM vw_globalfires_country_biome_max01 a, vw_globalfires_country_biome b
   WHERE a.area = b.area
  ORDER BY a.iso3166_2;

SELECT * FROM vw_globalfires_country_biome_max02;
"AD";"Temperate Broadleaf and Mixed Forests";0.0520229
"AE";"Deserts and Xeric Shrublands";6.20797
"AF";"Deserts and Xeric Shrublands";49.9593
"AG";"Deserts and Xeric Shrublands";0.0279382
(...)

Obrigado pela atenção. Cumprimentos,


Eloi Ribeiro
GIS Analyst
39,45º -4,40º
http://eloiribeiro.wordpress.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] quantos campos tem uma tabela?

2010-09-24 Por tôpico Eloi Ribeiro
OK, já encontrei a resposta, assim:

SELECT count(column_name) FROM information_schema.columns WHERE table_name
='nome_da_tabela';

Obrigado,

Eloi Ribeiro
GIS Analyst
39,45º -4,40º
http://eloiribeiro.wordpress.com


2010/9/24 Eloi Ribeiro 

> Olá à lista,
>
> Existe uma maneira de saber quantos campos tem uma determinada tabela com
> uma consulta SQL?
> Obrigado!
> Saudações,
>
> Eloi Ribeiro
> GIS Analyst
> 39,45º -4,40º
> http://eloiribeiro.wordpress.com
>
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] quantos campos tem uma tabela?

2010-09-24 Por tôpico Eloi Ribeiro
Olá à lista,

Existe uma maneira de saber quantos campos tem uma determinada tabela com
uma consulta SQL?
Obrigado!
Saudações,

Eloi Ribeiro
GIS Analyst
39,45º -4,40º
http://eloiribeiro.wordpress.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Como converter DOY em data (AAAA-MM-DD)?

2010-09-02 Por tôpico Eloi Ribeiro
On Thu, Sep 2, 2010 at 14:24, Fabrízio de Royes Mello <
fabriziome...@gmail.com> wrote:

>
>
> Em 2 de setembro de 2010 05:56, Eloi Ribeiro escreveu:
>
> Ola!
>>
>> Numa tabela tenho o campo 'year' (smallint) com o ano e o campo 'day_j'
>> (smallint) com o dia do ano, de 1 a 366.
>> Como faço para passar a data ISO 8601 (-MM-DD)?
>>
>>
>
> Tente:
>
> postg...@bdteste=# select extract(doy from current_date);
>  date_part
> ---
>245
> (1 row)
>
> postg...@bdteste=# select to_date('2010-245', '-DDD');
>   to_date
> 
>  2010-09-02
> (1 row)
>


Boa, funciona estupendamente, terei em conta esta dica.

Obrigado!

Eloi Ribeiro
GIS Analyst
39,45º -4,40º
http://eloiribeiro.wordpress.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Como converter DOY em data (AAAA-MM-DD)?

2010-09-02 Por tôpico Eloi Ribeiro
Bem respondo a mim mesmo.

Como tinha outro campo (tai93) com 'Seconds counted from UTC midnight Jan.
1, 1993' fiz:

UPDATE tabela SET date = CAST(tai93/86400 AS INT) + CAST('1993-01-01' AS
DATE);

E já tenho a data no formato desejado.

Obrigado, Ciao,

Eloi Ribeiro
GIS Analyst
39,45º -4,40º
http://eloiribeiro.wordpress.com


2010/9/2 Eloi Ribeiro 

> Ola!
>
> Numa tabela tenho o campo 'year' (smallint) com o ano e o campo 'day_j'
> (smallint) com o dia do ano, de 1 a 366.
> Como faço para passar a data ISO 8601 (AAAA-MM-DD)?
>
> Obrigado pela atenção. Cumprimentos,
>
> Eloi Ribeiro
> GIS Analyst
> 39,45º -4,40º
> http://eloiribeiro.wordpress.com
>
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] Como converter DOY em data (AAAA-MM-DD)?

2010-09-02 Por tôpico Eloi Ribeiro
Ola!

Numa tabela tenho o campo 'year' (smallint) com o ano e o campo 'day_j'
(smallint) com o dia do ano, de 1 a 366.
Como faço para passar a data ISO 8601 (-MM-DD)?

Obrigado pela atenção. Cumprimentos,

Eloi Ribeiro
GIS Analyst
39,45º -4,40º
http://eloiribeiro.wordpress.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] tabelas a que um determinado utilizador tem GRANT SELECT?

2009-11-02 Por tôpico Eloi Ribeiro
2009/11/2 Leonardo Cezar 

> 2009/11/2 Eloi Ribeiro :
>
> > Como buscar nas tabelas de sistema do postgresql, todas as tabelas a que
> um
> > determinado ROLE tem GRANT SELECT?
>
> SELECT table_schema,table_name,grantee
>   FROM information_schema.role_table_grants
> WHERE grantee = $$meu_usuario$$
>  AND privilege_type = $$SELECT$$;
>
> Abraço!
>
> -Leo
> --
> Leonardo Cezar
> http://www.aslid.org.br
> http://postgreslogia.wordpress.com
> http://www.dextra.com.br/postgres
>


Muito obrigado Leo, era isso mesmo que procurava.
Abraço,
Eloi

-- 
Eloi Ribeiro
GIS Analyst
39.45º -4.40º
http://eloiribeiro.wordpress.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] tabelas a que um determinado utilizador tem GRANT SELECT?

2009-11-02 Por tôpico Eloi Ribeiro
Bom dia,

Como buscar nas tabelas de sistema do postgresql, todas as tabelas a que um
determinado ROLE tem GRANT SELECT?
Obrigado!

-- 
Eloi Ribeiro
GIS Analyst
39.45º -4.40º
http://eloiribeiro.wordpress.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Serviço PostgreSQL não arranca em windows após apagado abrupto

2009-09-16 Por tôpico Eloi Ribeiro
Obrigado pela dica Tiago, suponho que me servirá no futuro. A final optei
por desinstalar PostgreSQL 8.3 e instalei a nova versão (8.4) agora estou
restaurando a base de dados com calma e a deixar todo documentado, o que
antes não fiz.

Obrigado,

Eloi

2009/9/16 Tiago Adami 

> Para iniciar o banco através do console eu utilizo um atalho para o CMD.EXE
> no desktop, clico com o botão direito sobre o atalho e aciono o menu
> "Executar Como". Seleciono o usuário "postgres", informo a senha e o console
> é aberto rodando como usuário "postgres".
>
> Desta forma, eu acesso o diretório de instalação do banco (no meu caso
> D:\PostgreSQL\8.3) e inicio o banco de dados através do comando:
>
> D:\PostgreSQL\8.3>bin\postgres -D "D:\PostgreSQL\8.3\data"
>
> Todas as informações do log são impressas no console. Para encerrar o
> banco, apenas pressione CTRL+C, ou então feche a janela do MS-DOS.
>
> Depois de carregar o cluster desta forma, tente reindexar o banco através
> do "reindexdb.exe" em outro console.
>
> --
> TIAGO J. ADAMI
> http://www.adamiworks.com
> adamitj "at" gmail "dot" com
> Dois Vizinhos - PR
>
> 2009/9/15 Eloi Ribeiro 
>
>>
>>
>> 2009/9/15 André Volpato 
>>
>>  Eloi Ribeiro escreveu:
>>>
>>> Olá a toda a lista,
>>>
>>> Tenho um computador com windows (xp prof. ver. 2002 com SP3), *PostgreSQL
>>> *8.3.5-2 e *PostGIS *1.3.5, este computador estava a realizar uma tarefa
>>> (de longa duração) de análise em *PostgreSQL+PostGIS* quando
>>> abruptamente o computador foi apagado, ao reiniciar o computador o serviço
>>> não arrancou registando no *log* as seguintes mensagens:
>>>
>>> 2009-09-15 08:34:38 CEST LOG:  database system was interrupted while in
>>> recovery at 2009-09-14 14:06:32 CEST
>>> 2009-09-15 08:34:38 CEST HINT:  This probably means that some data is
>>> corrupted and you will have to use the last backup for recovery.
>>> 2009-09-15 08:34:38 CEST LOG:  database system was not properly shut
>>> down; automatic recovery in progress
>>> 2009-09-15 08:34:38 CEST LOG:  redo starts at 67/C5C956D8
>>> 2009-09-15 08:34:38 CEST LOG:  unexpected pageaddr 67/BDFD in log
>>> file 103, segment 197, offset 16580608
>>> 2009-09-15 08:34:38 CEST LOG:  redo done at 67/C5FCFFB0
>>> 2009-09-15 08:34:38 CEST FATAL:  index "9065509" contains unexpected zero
>>> page at block 0
>>> 2009-09-15 08:34:38 CEST HINT:  Please REINDEX it.
>>> 2009-09-15 08:34:38 CEST LOG:  startup process (PID 3476) exited with
>>> exit code 1
>>> 2009-09-15 08:34:38 CEST LOG:  aborting startup due to startup process
>>> failure
>>> (...)
>>>
>>>
>>> Você tentou rodar um REINDEX, como está escrito no log ?
>>>
>>> []´s, ACV
>>>
>>
>> Não o tinha tentado. Suponho que é assim:
>> postgres --single -D "C:\Archivos de programa\PostgreSQL\8.3\data" -P
>> nome_da_bd
>>
>> e depois seria:
>> REINDEX SYSTEM nome_da_bd
>>
>> Mas não consigo arrancar o *postmaster*, dá-me a seguinte mensagem:
>>
>> "Execution of PostgreSQL by a user with administrative permissions is not
>> permitted.
>> The server must be started under an unprivileged user ID to prevent
>> possible system security compromises. See the documentation for more
>> information on how to properly start thr server."
>>
>> Reinicio a sessão com um utilizador não administrador, e tenho o seguinte:
>> "could  not create lock file "postmaster.pid": Permission denied"
>>
>> Alguma pista?
>>
>> eloi
>>
>> ___
>> pgbr-geral mailing list
>> pgbr-geral@listas.postgresql.org.br
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>>
>
>
>
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>


-- 
Eloi Ribeiro
GIS Analyst
39.45º -4.40º
http://eloiribeiro.wordpress.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Serviço PostgreSQL não arranca em windows após apagado abrupto

2009-09-15 Por tôpico Eloi Ribeiro
2009/9/15 Tarcísio Sassara 

> Me parece que você fechou a janela pela qual iniciou o serviço com o
> "pg_ctl start...".
>
> Isso ocorreu comigo quando estava testando a versão binária do postgres 8.4
> no
> windows alguns dias atrás.
>
> Como resolvi:
> Quando fui encerrar o banco, abri uma segunda janela e
> executei o comando para parar o postgres com o comando "pg_ctl stop..."
>
> Se você conseguir tornar o postgres um serviço do windows,
> provavelmente não terá este problema.
>
> A versão do instalável do postgres 8.4 não te serve? Acho que com o
> instalador você terá mais sucesso.
>
> http://www.enterprisedb.com/products/pgdownload.do
>
>
>
Queria evitar uma nova instalação, o óptimo seria poder recuperar os dados.
eloi




-- 
Eloi Ribeiro
GIS Analyst
39.45º -4.40º
http://eloiribeiro.wordpress.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Serviço PostgreSQL não arranca em windows após apagado abrupto

2009-09-15 Por tôpico Eloi Ribeiro
2009/9/15 André Volpato 

>  Eloi Ribeiro escreveu:
>
> Olá a toda a lista,
>
> Tenho um computador com windows (xp prof. ver. 2002 com SP3), *PostgreSQL
> *8.3.5-2 e *PostGIS *1.3.5, este computador estava a realizar uma tarefa
> (de longa duração) de análise em *PostgreSQL+PostGIS* quando abruptamente
> o computador foi apagado, ao reiniciar o computador o serviço não arrancou
> registando no *log* as seguintes mensagens:
>
> 2009-09-15 08:34:38 CEST LOG:  database system was interrupted while in
> recovery at 2009-09-14 14:06:32 CEST
> 2009-09-15 08:34:38 CEST HINT:  This probably means that some data is
> corrupted and you will have to use the last backup for recovery.
> 2009-09-15 08:34:38 CEST LOG:  database system was not properly shut down;
> automatic recovery in progress
> 2009-09-15 08:34:38 CEST LOG:  redo starts at 67/C5C956D8
> 2009-09-15 08:34:38 CEST LOG:  unexpected pageaddr 67/BDFD in log file
> 103, segment 197, offset 16580608
> 2009-09-15 08:34:38 CEST LOG:  redo done at 67/C5FCFFB0
> 2009-09-15 08:34:38 CEST FATAL:  index "9065509" contains unexpected zero
> page at block 0
> 2009-09-15 08:34:38 CEST HINT:  Please REINDEX it.
> 2009-09-15 08:34:38 CEST LOG:  startup process (PID 3476) exited with exit
> code 1
> 2009-09-15 08:34:38 CEST LOG:  aborting startup due to startup process
> failure
> (...)
>
>
> Você tentou rodar um REINDEX, como está escrito no log ?
>
> []´s, ACV
>

Não o tinha tentado. Suponho que é assim:
postgres --single -D "C:\Archivos de programa\PostgreSQL\8.3\data" -P
nome_da_bd

e depois seria:
REINDEX SYSTEM nome_da_bd

Mas não consigo arrancar o *postmaster*, dá-me a seguinte mensagem:

"Execution of PostgreSQL by a user with administrative permissions is not
permitted.
The server must be started under an unprivileged user ID to prevent possible
system security compromises. See the documentation for more information on
how to properly start thr server."

Reinicio a sessão com um utilizador não administrador, e tenho o seguinte:
"could  not create lock file "postmaster.pid": Permission denied"

Alguma pista?

eloi
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] Serviço PostgreSQL não arranca em windows após apagado abrupto

2009-09-15 Por tôpico Eloi Ribeiro
Olá a toda a lista,

Tenho um computador com windows (xp prof. ver. 2002 com SP3),
*PostgreSQL *8.3.5-2
e *PostGIS *1.3.5, este computador estava a realizar uma tarefa (de longa
duração) de análise em *PostgreSQL+PostGIS* quando abruptamente o computador
foi apagado, ao reiniciar o computador o serviço não arrancou registando no
*log* as seguintes mensagens:

2009-09-15 08:34:38 CEST LOG:  database system was interrupted while in
recovery at 2009-09-14 14:06:32 CEST
2009-09-15 08:34:38 CEST HINT:  This probably means that some data is
corrupted and you will have to use the last backup for recovery.
2009-09-15 08:34:38 CEST LOG:  database system was not properly shut down;
automatic recovery in progress
2009-09-15 08:34:38 CEST LOG:  redo starts at 67/C5C956D8
2009-09-15 08:34:38 CEST LOG:  unexpected pageaddr 67/BDFD in log file
103, segment 197, offset 16580608
2009-09-15 08:34:38 CEST LOG:  redo done at 67/C5FCFFB0
2009-09-15 08:34:38 CEST FATAL:  index "9065509" contains unexpected zero
page at block 0
2009-09-15 08:34:38 CEST HINT:  Please REINDEX it.
2009-09-15 08:34:38 CEST LOG:  startup process (PID 3476) exited with exit
code 1
2009-09-15 08:34:38 CEST LOG:  aborting startup due to startup process
failure

Existe alguma maneira de por a base de dados outra vez a funcionar? Não
tenho um *dump *para um *restore*. Tenho sim os dados em csv, shp e
alguns *scripts
*sql para a criação de esquemas, usuários e algumas das tabelas.

Tentando remediar a situação, resolvi criar de zero um novo *cluster*, com
as seguintes sentencias:

--
initdb -U postgres -E UTF8 -D "C:\Archivos de programa\PostgreSQL\8.3\data"
pg_ctl -D "C:\Archivos de programa\PostgreSQL\8.3\data" -l logfile start
psql -U postgres -f "C:\Archivos de
programa\PostgreSQL\8.3\share\contrib\adminpack.sql"
createdb -U postgres -E UTF8 -O postgres -T postgres postgis
createlang -U postgres plpgsql postgis
psql -U postgres -d postgis -f "C:\Archivos de
programa\PostgreSQL\8.3\share\contrib\lwpostgis.sql"
psql -U postgres -d postgis -f "C:\Archivos de
programa\PostgreSQL\8.3\share\contrib\spatial_ref_sys.sql"
--

Este funciona perfeitamente até que deixa de funcionar ao fechar a consola
onde foram executadas as anteriores sentencias mencionadas!
Reiniciando o computador o serviço continua sem arrancar, tenho de abrir a
consola e executar de novo
pg_ctl -D "C:\Archivos de programa\PostgreSQL\8.3\data" -l logfile start
e não fechar a consola porque senão deixa de funcionar!

O que tenho de fazer para que o serviço de *PostgreSQL *arranque ao iniciar
o sistema operativo, seja tanto com o anterior *cluster *ou com o novo?

Fui ver se este serviço ainda existia, e parece estar tudo bem:
Em ferramentas administrativas->Serviços->PostgreSQL Database Server
8.3->Acesso ao executável: "C:\Archivos de
programa\PostgreSQL\8.3\bin\pg_ctl.exe" runservice -w -N "pgsql-8.3" -D
"C:\Archivos de programa\PostgreSQL\8.3\data\"

Obrigado por ler e pelos comentários, espero que tenha exposto o meu
problema com claridade.

Atentamente,


-- 
Eloi Ribeiro
GIS Analyst
39.45º -4.40º
http://eloiribeiro.wordpress.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] update com um disparador

2008-12-09 Por tôpico Eloi Ribeiro
Perfeito, era isso mesmo, muito obrigado Osvaldo.
Saudações,
Eloi

2008/12/9 Osvaldo Kussama <[EMAIL PROTECTED]>

> Em 09/12/08, Eloi Ribeiro<[EMAIL PROTECTED]> escreveu:
> > Ola a toda a lista.
> >
> > Estou tentar fazer um disparador (trigger) que actualize um campo de uma
> > tabela com o campo de outra tabela. Se os campos estão na mesma tabela já
> > entendi como se faz, mas quando não é o caso como se poderia fazer?
> >
> > exemplo:
> >
> 
> > create or replace function nome_funcao() returns trigger as '
> > begin
> >
> > NEW.campo0 = NEW.campo1 + NEW.campo2; -- aqui tudo bem
> >
> > -- aqui está a minha duvida, como fazer um update
> > UPDATE tabela1 SET campo0 = tabela2.campo0 FROM tabela2 where tabela1.id=
> > tabela2.id;
>
> Pelo que entendi no lugar do UPDATE acima use:
> SELECT tabela2.campo0 INTO new.campo0 FROM tabela2 WHERE tabela2.id =
> new.id;
>
>
> >
> > return NEW;
> > end;
> > ' language plpgsql;
> > create trigger nome_disparador before insert or update on tabela1
> > for each row execute procedure nome_funcao();
> >
>
>
> Osvaldo
> _______
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>



-- 
Eloi Ribeiro

http://www.google.com/s2/profiles/100374240045472689555?zx=3p06h0iaagvn
eloi.ribeiro ARROBA gmail PONTO com
http://eloiribeiro.blogspot.com

España, Valencia

Antes de imprimir pensa que estará a gastar papel, tinta e energia.
Apaga todos os endereços de email do cabeçalho, bem como qualquer um
que apareça no corpo da mensagem. Essa informação é privada.
Coloca os endereços dos destinatários em BCC ou CCo.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] update com um disparador

2008-12-09 Por tôpico Eloi Ribeiro
Ola a toda a lista.

Estou tentar fazer um disparador (trigger) que actualize um campo de uma
tabela com o campo de outra tabela. Se os campos estão na mesma tabela já
entendi como se faz, mas quando não é o caso como se poderia fazer?

exemplo:

create or replace function nome_funcao() returns trigger as '
begin

NEW.campo0 = NEW.campo1 + NEW.campo2; -- aqui tudo bem

-- aqui está a minha duvida, como fazer um update
UPDATE tabela1 SET campo0 = tabela2.campo0 FROM tabela2 where tabela1.id =
tabela2.id;

return NEW;
end;
' language plpgsql;
create trigger nome_disparador before insert or update on tabela1
for each row execute procedure nome_funcao();


Alguem me pode dar umas dicas?
Muito obrigado. Ciao,


-- 
Eloi Ribeiro

http://www.google.com/s2/profiles/100374240045472689555?zx=3p06h0iaagvn
eloi.ribeiro ARROBA gmail PONTO com
http://eloiribeiro.blogspot.com

España, Valencia

Antes de imprimir pensa que estará a gastar papel, tinta e energia.
Apaga todos os endereços de email do cabeçalho, bem como qualquer um
que apareça no corpo da mensagem. Essa informação é privada.
Coloca os endereços dos destinatários em BCC ou CCo.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] apagar registos repetidos

2008-11-07 Por tôpico Eloi Ribeiro
Muito obrigado,

Está solucionado. Sabia que isto era canja para vocês.

xau,

Eloi

2008/11/6 Jota <[EMAIL PROTECTED]>

> Olá,
>
> No meu blog tem um post sobre como resolver esse tipo de problema
> (http://jotacomm.wordpress.com).
>
> []s
>
>
>
>
> 2008/11/6 William Leite Araújo <[EMAIL PROTECTED]>:
> > Sugestão:
> >
> > 1 ) Crie uma tabela temporária com os dados que deseja manter (registros
> com
> > campo3 maior).
> > 2) Delete os registros da tabela que não estejam na tabela temporaria;
> >
> > Ex.:
> >
> > BEGIN;
> > CREATE TEMP TABLE mantidos AS
> >SELECT campo1 as t1,campo2 as t2,max(campo3), count(1)
> >FROM [tabela] GROUP BY campo1, campo2;
> >
> > DELETE FROM [tabela] WHERE (campo1,campo2,campo3) NOT IN (SELECT
> t1,t2,max
> > FROM mantidos );
> >
> > END;
> >
> >Funcionará caso a tripla (campo1,campo2,campo3) não contenha nulos nem
> se
> > repita.
> >
> > 2008/11/6 Eloi Ribeiro <[EMAIL PROTECTED]>
> >>
> >> Saudações à lista,
> >>
> >> Tenho a seguinte duvida:
> >>
> >> Numa tabela onde existem registos repetidos, ou seja, onde a combinação
> >> entre o campo1(smallint) e campo2(date) se repetem. Gostaria de eliminar
> >> todos os registos repetidos excepto o que tenha no campo3(date) a data
> mais
> >> recente.
> >>
> >> |campo1 (smallint) | campo2 (date) | campo3 (date) |
> >>
> >>
> |----------|
> >> | 1|  2008-06-12 |   2008-06-12| <-
> >> eliminar
> >> | 1|  2008-06-12 |   2008-11-06|
> >> (...)
> >>
> >>
> >> Muito obrigado pelas vossas sugestões.
> >>
> >> Ciao,
> >>
> >>
> >>
> >> --
> >> Eloi Ribeiro
> >>
> >> eloi.ribeiro ARROBA gmail PONTO com
> >> http://eloiribeiro.blogspot.com
> >>
> >> España, Valencia
> >>
> >> Antes de imprimir pensa que estará a gastar papel, tinta e energia.
> >> Apaga todos os endereços de email do cabeçalho, bem como qualquer um
> >> que apareça no corpo da mensagem. Essa informação é privada.
> >> Coloca os endereços dos destinatários em BCC ou CCo.
> >>
> >>
> >> ___
> >> pgbr-geral mailing list
> >> pgbr-geral@listas.postgresql.org.br
> >> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
> >>
> >
> >
> >
> > --
> > William Leite Araújo
> > Mobile Solution Manager   - QualiConsult
> > Analista de Banco de Dados
> >
> > ___
> > pgbr-geral mailing list
> > pgbr-geral@listas.postgresql.org.br
> > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
> >
> >
>
>
>
> --
> João Paulo
> www.dextra.com.br/postgres
> PostgreSQL
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] apagar registos repetidos

2008-11-06 Por tôpico Eloi Ribeiro
Saudações à lista,

Tenho a seguinte duvida:

Numa tabela onde existem registos repetidos, ou seja, onde a combinação
entre o campo1(smallint) e campo2(date) se repetem. Gostaria de eliminar
todos os registos repetidos excepto o que tenha no campo3(date) a data mais
recente.

|campo1 (smallint) | campo2 (date) | campo3 (date) |
|--|
| 1|  2008-06-12 |   2008-06-12| <- eliminar
| 1|  2008-06-12 |   2008-11-06|
(...)


Muito obrigado pelas vossas sugestões.

Ciao,



-- 
Eloi Ribeiro

eloi.ribeiro ARROBA gmail PONTO com
http://eloiribeiro.blogspot.com

España, Valencia

Antes de imprimir pensa que estará a gastar papel, tinta e energia.
Apaga todos os endereços de email do cabeçalho, bem como qualquer um
que apareça no corpo da mensagem. Essa informação é privada.
Coloca os endereços dos destinatários em BCC ou CCo.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] update com a data mais recente desse registo

2008-09-01 Por tôpico Eloi Ribeiro
Obrigado Osvaldo, terei em conta a sugestão.
saudações,
eloi


2008/9/1 Osvaldo Kussama <[EMAIL PROTECTED]>

> Em 01/09/08, Eloi Ribeiro<[EMAIL PROTECTED]> escreveu:
> >
> > Tenho a seguinte duvida:
> >
> > Numa tabela com a seguinte estrutura:
> >
> |-||-|--|
> > | id | data1(tipo:Date) | data2(tipo:Date) |  data3(tipo:Date) |
> >
> |-||-|--|
> > |  1 |   2006-10-02 |2006-10-23 |  |
> > (...)
> >
> > Necessito actualizar o campo data3 com a data mais recente dos campos
> data1
> > e data2 do mesmo registo.
> >
> > Tentei da seguinte maneira:
> >
> >  UPDATE tabela SET data3 = max(data1, data2)
> WHERE
> > id = 1;
> >
> > Mas não funcionou. Mesmo que funcionasse teria que repetir a consulta
> para
> > todos os id's existentes com recurso a um script ou gatilho, é possível
> > fazer-lo apenas com SQL, sem usar gatilho ou script?
> >
>
>
> Utilize GREATEST:
> UPDATE tabela SET data3 = GREATEST(data1, data2) WHERE id = 1;
>
> http://www.postgresql.org/docs/current/interactive/functions-conditional.html#AEN14508
>
> Osvaldo
> _______
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>



-- 
Eloi Ribeiro

eloi.ribeiro ARROBA gmail PONTO com
http://eloiribeiro.blogspot.com

Espanha, Valência

Antes de imprimir pensa que estará a gastar papel, tinta e energia.
Apaga todos os endereços de email do cabeçalho, bem como qualquer um
que apareça no corpo da mensagem. Essa informação é privada.
Coloca os endereços dos destinatários em BCC ou CCo.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] update com a data mais recente desse registo

2008-09-01 Por tôpico Eloi Ribeiro
pode ser, mas sem essa ajuda não teria chagado ao resultado. obrigado
abraço,

eloi

2008/9/1 William Leite Araújo <[EMAIL PROTECTED]>

>   Ops... acho que programar em Java está afetando meus SQL... =D
>
> 2008/9/1 William Leite Araújo <[EMAIL PROTECTED]>
>
>> (...)
>> Ex.: *UPDATE* tabela *SET* data3 = *CASE WHEN* data2 > data1 : data 2*ELSE
>> * data1 *END*;
>>
>>
> (...)
>>
>
>  Correto: *UPDATE* tabela *SET* data3 = *CASE WHEN* data2 > data1 *
> THEN* data 2* ELSE* data1 *END*;
>
> --
> William Leite Araújo
> Analista de Banco de Dados - QualiConsult
>
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>


-- 
Eloi Ribeiro

eloi.ribeiro ARROBA gmail PONTO com
http://eloiribeiro.blogspot.com

Espanha, Valência

Antes de imprimir pensa que estará a gastar papel, tinta e energia.
Apaga todos os endereços de email do cabeçalho, bem como qualquer um
que apareça no corpo da mensagem. Essa informação é privada.
Coloca os endereços dos destinatários em BCC ou CCo.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] update com a data mais recente desse registo

2008-09-01 Por tôpico Eloi Ribeiro
ok já está mudei os deoi pontos por THEN e perfeito.
Muito obrigado pela ajuda!
ciao,
eloi

2008/9/1 Eloi Ribeiro <[EMAIL PROTECTED]>

> Não aceita os dois pontos
>
> ERROR:  syntax error at or near ":"
> LINE 129: ...la SET data3 = CASE WHEN data2 > data1 : data2 else...
>
>^
> Alguma sugestão?
>
> Estou utilizando a versão 8.2.7 em windows xp com pgAdmin III 1.8.4.
>
>
> 2008/9/1 William Leite Araújo <[EMAIL PROTECTED]>
>
> 2008/9/1 Eloi Ribeiro <[EMAIL PROTECTED]>
>>
>>> Olá à lista,
>>>
>>> Tenho a seguinte duvida:
>>>
>>> Numa tabela com a seguinte estrutura:
>>> |-||-|--
>>> |
>>> | id | data1(tipo:Date) | data2(tipo:Date) |  data3(tipo:Date) |
>>> |-||-|--
>>> |
>>> |  1 |   2006-10-02 |2006-10-23 |  |
>>> (...)
>>>
>>> Necessito actualizar o campo data3 com a data mais recente dos campos
>>> data1 e data2 do mesmo registo.
>>>
>>> Tentei da seguinte maneira:
>>>
>>>  UPDATE tabela SET data3 = max(data1, data2)
>>> WHERE id = 1;
>>>
>>> Mas não funcionou.
>>>
>>
>> É porque a função "max" não existe. Você pode:
>> 1) Criá-la
>> 2) Mudar o teste
>>
>>
>>> Mesmo que funcionasse teria que repetir a consulta para todos os id's
>>> existentes com recurso a um script ou gatilho, é possível fazer-lo apenas
>>> com SQL, sem usar gatilho ou script?
>>>
>>
>> Uma simples consulta SQL, sem  a cláusula "WHERE" irá atualizar TODOS
>> os registros da sua tabela.
>>
>> Ex.: *UPDATE* tabela *SET* data3 = *CASE WHEN* data2 > data1 : data 2*ELSE
>> * data1 *END*;
>>
>>>
>>>
>>> Muito obrigado. atentamente,
>>>
>>>
>>> --
>>> Eloi Ribeiro
>>>
>>> eloi.ribeiro ARROBA gmail PONTO com
>>> http://eloiribeiro.blogspot.com
>>>
>>> Espanha, Valência
>>>
>>> Antes de imprimir pensa que estará a gastar papel, tinta e energia.
>>> Apaga todos os endereços de email do cabeçalho, bem como qualquer um
>>> que apareça no corpo da mensagem. Essa informação é privada.
>>> Coloca os endereços dos destinatários em BCC ou CCo.
>>>
>>>
>>> ___
>>> pgbr-geral mailing list
>>> pgbr-geral@listas.postgresql.org.br
>>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>>
>>>
>>
>>
>> --
>> William Leite Araújo
>> Analista de Banco de Dados - QualiConsult
>>
>> ___
>> pgbr-geral mailing list
>> pgbr-geral@listas.postgresql.org.br
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>>
>
>
> --
> Eloi Ribeiro
>
> eloi.ribeiro ARROBA gmail PONTO com
> http://eloiribeiro.blogspot.com
>
> Espanha, Valência
>
> Antes de imprimir pensa que estará a gastar papel, tinta e energia.
> Apaga todos os endereços de email do cabeçalho, bem como qualquer um
> que apareça no corpo da mensagem. Essa informação é privada.
> Coloca os endereços dos destinatários em BCC ou CCo.
>
>


-- 
Eloi Ribeiro

eloi.ribeiro ARROBA gmail PONTO com
http://eloiribeiro.blogspot.com

Espanha, Valência

Antes de imprimir pensa que estará a gastar papel, tinta e energia.
Apaga todos os endereços de email do cabeçalho, bem como qualquer um
que apareça no corpo da mensagem. Essa informação é privada.
Coloca os endereços dos destinatários em BCC ou CCo.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] update com a data mais recente desse registo

2008-09-01 Por tôpico Eloi Ribeiro
Não aceita os dois pontos

ERROR:  syntax error at or near ":"
LINE 129: ...la SET data3 = CASE WHEN data2 > data1 : data2 else...

   ^
Alguma sugestão?

Estou utilizando a versão 8.2.7 em windows xp com pgAdmin III 1.8.4.


2008/9/1 William Leite Araújo <[EMAIL PROTECTED]>

> 2008/9/1 Eloi Ribeiro <[EMAIL PROTECTED]>
>
>> Olá à lista,
>>
>> Tenho a seguinte duvida:
>>
>> Numa tabela com a seguinte estrutura:
>> |-||-|--
>> |
>> | id | data1(tipo:Date) | data2(tipo:Date) |  data3(tipo:Date) |
>> |-||-|--
>> |
>> |  1 |   2006-10-02 |2006-10-23 |  |
>> (...)
>>
>> Necessito actualizar o campo data3 com a data mais recente dos campos
>> data1 e data2 do mesmo registo.
>>
>> Tentei da seguinte maneira:
>>
>>  UPDATE tabela SET data3 = max(data1, data2) WHERE
>> id = 1;
>>
>> Mas não funcionou.
>>
>
> É porque a função "max" não existe. Você pode:
> 1) Criá-la
> 2) Mudar o teste
>
>
>> Mesmo que funcionasse teria que repetir a consulta para todos os id's
>> existentes com recurso a um script ou gatilho, é possível fazer-lo apenas
>> com SQL, sem usar gatilho ou script?
>>
>
> Uma simples consulta SQL, sem  a cláusula "WHERE" irá atualizar TODOS
> os registros da sua tabela.
>
> Ex.: *UPDATE* tabela *SET* data3 = *CASE WHEN* data2 > data1 : data 2*ELSE
> * data1 *END*;
>
>>
>>
>> Muito obrigado. atentamente,
>>
>>
>> --
>> Eloi Ribeiro
>>
>> eloi.ribeiro ARROBA gmail PONTO com
>> http://eloiribeiro.blogspot.com
>>
>> Espanha, Valência
>>
>> Antes de imprimir pensa que estará a gastar papel, tinta e energia.
>> Apaga todos os endereços de email do cabeçalho, bem como qualquer um
>> que apareça no corpo da mensagem. Essa informação é privada.
>> Coloca os endereços dos destinatários em BCC ou CCo.
>>
>>
>> ___
>> pgbr-geral mailing list
>> pgbr-geral@listas.postgresql.org.br
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>>
>
>
> --
> William Leite Araújo
> Analista de Banco de Dados - QualiConsult
>
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>


-- 
Eloi Ribeiro

eloi.ribeiro ARROBA gmail PONTO com
http://eloiribeiro.blogspot.com

Espanha, Valência

Antes de imprimir pensa que estará a gastar papel, tinta e energia.
Apaga todos os endereços de email do cabeçalho, bem como qualquer um
que apareça no corpo da mensagem. Essa informação é privada.
Coloca os endereços dos destinatários em BCC ou CCo.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] update com a data mais recente desse registo

2008-09-01 Por tôpico Eloi Ribeiro
Olá à lista,

Tenho a seguinte duvida:

Numa tabela com a seguinte estrutura:
|-||-|--|
| id | data1(tipo:Date) | data2(tipo:Date) |  data3(tipo:Date) |
|-||-|--|
|  1 |   2006-10-02 |2006-10-23 |  |
(...)

Necessito actualizar o campo data3 com a data mais recente dos campos data1
e data2 do mesmo registo.

Tentei da seguinte maneira:

 UPDATE tabela SET data3 = max(data1, data2) WHERE
id = 1;

Mas não funcionou. Mesmo que funcionasse teria que repetir a consulta para
todos os id's existentes com recurso a um script ou gatilho, é possível
fazer-lo apenas com SQL, sem usar gatilho ou script?

Muito obrigado. atentamente,


-- 
Eloi Ribeiro

eloi.ribeiro ARROBA gmail PONTO com
http://eloiribeiro.blogspot.com

Espanha, Valência

Antes de imprimir pensa que estará a gastar papel, tinta e energia.
Apaga todos os endereços de email do cabeçalho, bem como qualquer um
que apareça no corpo da mensagem. Essa informação é privada.
Coloca os endereços dos destinatários em BCC ou CCo.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] PostGIS

2008-08-12 Por tôpico Eloi Ribeiro
Manual PostGIS http://www.webgis.com.br/postgis/

Sumário

PostGIS é uma extensão ao sistema de banco de dados object-relational
PostgreSQL, que permite o uso de objetos GIS (Sistemas de Informação
Geográfica) serem armazenados em banco de dados. PostGIS inclui suporte
para índices espacias GiST-based R-Tree e funções para análise e
processamento de objetos GIS.

Este é um manual da versão 1.2.2SVN

Boa sorte,

Eloi



2008/8/12 Marcelo Costa <[EMAIL PROTECTED]>

> Olá, bom dia!
>
> 2008/8/12 Cézar Augusto Ferreira <[EMAIL PROTECTED]>
>
>> Galera, alguém sabe onde eu consigo material sobre PostGIS, cartografia,
>> Sistemas de coordenadas, essas paradas assim?
>> Obrigado!
>>
>
> Procure por 
> http://www.geolivre.org.br/<http://www.geolivre.org.br/downloads/geozine/geozine-n01-v20-16ago2007.pdf>,
> há artigos e tutoriais que podem te ajudar.
>
> Att,
>
>
> --
> Marcelo Costa
>
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>


-- 
Eloi Ribeiro

eloi.ribeiro ARROBA gmail PONTO com
http://eloi-ribeiro.blogspot.com

Espanha, Valência

Antes de imprimir pensa que estará a gastar papel, tinta e energia.

Apaga todos os endereços de email do cabeçalho, bem como qualquer um
que apareça no corpo da mensagem. Essa informação é privada e não publica.

Protege os endereços dos destinatários colocando os mesmos em BCC ou CCo.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] especificar a nova localização do cluster no boot do sistema

2008-07-03 Por tôpico Eloi Ribeiro
Obrigado pelos vossos comentários foram de grande ajuda.

Ciao,

Eloi


2008/7/1 Leonardo Cezar <[EMAIL PROTECTED]>:

> 2008/6/30 Eloi Ribeiro <[EMAIL PROTECTED]>:
> > Obrigado pela resposta.
>
> http://www.postgresql.org.br/RegrasLista
>
> > Duvidas:
> >
> > 1. É mesmo necessário o drop do cluster '/var/lib/postgresql/8.3/main/'?
>
> Se refere-se a uma instalação do Debian, não. Utilize
> pg_upgradecluster ao invés.
>
> > 2. Com 'pg_createcluster -u postgres --start-conf 8.3 seucluster' vou
> > criar outro cluster? Certo?. Mas já o tenho criado em
> > '/media/HDB/PostgreSQL/Data', apenas quero que quando inicie o PC e
> > entre em psql o cluster seja este '/media/HDB/PostgreSQL/Data' e não
> > este '/var/lib/postgresql/8.3/main/'.
>
> Visualize seus clusters em execução (pg_lsclister) e escolha um dos
> métodos:
>
> * psql --cluster 8.3/main ;
> * export PGCLUSTER=8.3/main;
> * echo "nome_user\tgroup\t8.3\tmain\tpostgres" >>
> /etc/ostgresql-common/user_clusters;
> * echo "nome_user\tgroup\t8.3\tmain\tpostgres" >> $HOME/.postgresqlrc
>
> > De momento o que faço para mudar de cluster é:
> > su postgres
> > /etc/init.d/postgresql-8.3 stop
> > /usr/lib/postgresql/8.3/bin/pg_ctl -D /media/HDB/PostgreSQL/Data start
>
> pg_ctlcluster 8.3  stop
>
> > Mas resulta incomodo fazer-lo cada vez que inicio o PC e gostaria de
> > saber como o configurar.
>
> Altere o valor de start.conf
>
> Abraço!
>
> -Leo
> --
> Leonardo Cezar
> http://pgcon.postgresql.org.br
> http://www.dextra.com.br/postgres
>



-- 
Eloi Ribeiro

eloi.ribeiro ARROBA gmail PONTO com
http://eloi-ribeiro.blogspot.com

Espanha, Valência

Antes de imprimir pensa que estará a gastar papel, tinta e energia.

Apaga todos os endereços de email do cabeçalho, bem como qualquer um
que apareça no corpo da mensagem. Essa informação é privada e não publica.

Protege os endereços dos destinatários colocando os mesmos em BCC ou CCo.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] especificar a nova localização do cluster no boot do sistema

2008-06-30 Por tôpico Eloi Ribeiro
Obrigado pela resposta.

Se entendo bem, sugeres que faça um drop do cluster que foi criado por
defeito na instalação, em /var/lib/postgresql/8.3/main/, e crie um novo.
E isso?

Duvidas:

1. É mesmo necessário o drop do cluster '/var/lib/postgresql/8.3/main/'?

2. Com 'pg_createcluster -u postgres --start-conf 8.3 seucluster' vou
criar outro cluster? Certo?. Mas já o tenho criado em
'/media/HDB/PostgreSQL/Data', apenas quero que quando inicie o PC e
entre em psql o cluster seja este '/media/HDB/PostgreSQL/Data' e não
este '/var/lib/postgresql/8.3/main/'.

De momento o que faço para mudar de cluster é:
su postgres
/etc/init.d/postgresql-8.3 stop
/usr/lib/postgresql/8.3/bin/pg_ctl -D /media/HDB/PostgreSQL/Data start

Mas resulta incomodo fazer-lo cada vez que inicio o PC e gostaria de
saber como o configurar.

Espero que me tenha explicado bem. Muito obrigado pelas sugestões.

Saudações,

Eloi

Seg, 2008-06-30 às 09:01 -0300, Fernando Ike de Oliveira escreveu:
> Em Fri, 27 Jun 2008 21:30:17 +0200
> Eloi Ribeiro <[EMAIL PROTECTED]> escreveu:
> 
> > Olá a toda a lista, tenho a seguinte duvida.
> > 
> > Estou a usando Ubuntu 8.04 e recentemente instalei PostgreSQL 8.3,
> > criei um novo cluster em /media/HDB/PostgreSQL/Data. Arranquei a base
> > de dados nesse cluster, cria umas base de dados de testes e tudo
> > funciona perfeito, mas quando reinicio o PC o cluster passa á
> > localização original de quando foi instalado PostgreSQL. Poderiam
> > dizer como posso especificar a nova localização do cluster no boot do
> > sistema.
> >
> 
>  Eloi, 
> 
> 
>   Isso acontece porque no Debian e derivados tem alguns scripts para
> facilitar o uso de várias instâncias de PostgreSQL na mesma máquina.
> Com o backup feito, para remover do local original e adicionar um
> novo cluster faça:
> 
> #pg_dropcluster 8.3 main
> #pg_createcluster -u postgres --start-conf 8.3 seucluster
> 
> 
> Saudações,

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] especificar a nova localização do cluster no boot do sistema

2008-06-27 Por tôpico Eloi Ribeiro
Olá a toda a lista, tenho a seguinte duvida.

Estou a usando Ubuntu 8.04 e recentemente instalei PostgreSQL 8.3,
criei um novo cluster em /media/HDB/PostgreSQL/Data. Arranquei a base
de dados nesse cluster, cria umas base de dados de testes e tudo
funciona perfeito, mas quando reinicio o PC o cluster passa á
localização original de quando foi instalado PostgreSQL. Poderiam
dizer como posso especificar a nova localização do cluster no boot do
sistema.

Muito obrigado. Atentamente,

Eloi


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral