> Ol� comunidade, (Postgres 8.2.4 e Distribui��o CentOS 4.5)
>
> Preciso (MUITO) verificar em uma fun��o se uma dada tabela existe no banco.
>
> O usu�rio envia uma determinada data pela entrada, a fun��o precisa
> verificar se essa tabela ainda existe (as tabelas est�o no formato
> bhpas_h_YYYY_MM_DD).
>
> Se essa tabela n�o estiver on-line, preciso recarregar ela no banco atrav�s
> de 02 arquivos que est�o no mesmo servidor Linux no path /tmp/sage/arqs.
> Esse dois arquivos s�o bhpas_h_YYYY_MM_DD.dados e bhpas_h_YYYY_MM_DD.sqm;
>
> Digamos que o usu�rio quer consultar dados de 06/11/2001; preciso verificar
> se existe uma tabela no banco chamada de bhpas_h_2001_11_06; Se n�o existir
> preciso carreg�-la atrav�s dos arquivos bhpas_h_2001_11_06.dados e
> bhpas_h_2001_11_06.sqm que est�o no path /tmp/sage/arqs.
>
> Eis o conte�do de bhpas_h_2001_11_06.sqm:
>
> CREATE TABLE bhpas_h_2001_11_06 (BH_DTHR TIMESTAMP WITH TIME ZONE, BH_CHAVE
> INT, BH_VARIACAO INT , FLAG INT, FLAGEST SMALLINT, LINFA REAL, LINFE REAL,
> LINFU REAL, LSUPA REAL, LSUPE REAL, LSUPU REAL, RESNORM REAL, RGALR
> SMALLINT, VALEST REAL, VALOR REAL)
>
> CREATE INDEX pas_h_2001_11_06_A_I (bh_chave, bh_dthr)
>
> UPDATE BH_pas_h_CTL SET BH_ESTADO='ONLINE', BH_DTHR=SYSTIMESTAMP() WHERE
> BH_NOME='bhpas_h_2001_11_06'\;\n
>
> COPY bhpas_h_2001_11_06 FROM 'bhpas_h_2001_11_06.dados' DELIMITER ','
>
> Uma outra quest�o � que preciso fazer isso dinamicamente.
>
> Como fazer um EXECUTE 'SE EXISTE TAL TABELA RETORNE VERDADEIRO' sem que o
> postgres
>
> retorne o seguinte erro: << cannot EXECUTE a null querystring >> ?
>
> numa pl...
>
> select relname from pg_class
> where relname = 'nome_da_sua_tabela' and relkind='r';
>
> if not found
>
> -- faz tudo o q vc precisa...
>
> end if;
>
> --
> Atenciosamente,
> Sebastian Selau Webber Colombo
Olá comunidade, fiz essa função baseado na dica do Sebastian, porém a mesma
apresenta resultados errôneos, tipo, coloco datas que tenho certeza que não
existe a tabela bhpas_h_YYYY_MM_DD e a função retorna que está presente. Acho
que o execute tenha alguma coisa a ver com isso (isso também ocorre com o
perform).
O que tenho que fazer? No aguardo on-line.
CREATE OR REPLACE FUNCTION "Funcao_para_Testes"(data date)
RETURNS integer AS
$BODY$
DECLARE sql varchar;
DECLARE aux varchar;
BEGIN
aux = replace(CAST(data AS varchar),'-','_');
sql = 'select "relname" from "pg_class" where "relname" = ''bhpas_h_' || aux ||
''' and "relkind"=''r''';
PERFORM sql;
IF NOT found THEN
raise notice 'tabela NÃO ESTÁ presente - %',sql;
ELSE
raise notice 'tabela está presente - %',sql;
END IF;
RETURN 0;
END;$BODY$
LANGUAGE 'plpgsql' VOLATILE;
SELECT "Funcao_para_Testes"('2000-02-05');
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral