--- Eli Medeiros Sousa <[EMAIL PROTECTED]> escreveu:
>
>
> Olá pessoal,
>
> Eu estou começando a utilizar o postgres 8.1,
> gostaria de saber se existe
> algo equivalente ao INSERT IGNORE do MySQL. (Tenta
> Inserir, e se houver erro
> por duplicação de chave ele simplesmente ignora o
> erro).
>
> [ ]s!!!
>
Veja, agora eu não conheço nenhuma opção que faça
isso. Mas você pode fazer assim:
tb_pessoa eh uma tabela com dois campos text: rg e
nome, onde rg é chave primária.
Para inserir um registro você pode fazer:
INSERT INTO tb_pessoa
SELECT
'1989994' as rg,
'Otacilio' as nome
WHERE
'1989994' NOT IN (SELECT rg FROM tb_pessoa)
Se você acha o comando acima complicado você pode
criar uma função:
CREATE OR REPLACE FUNCTION
insert_into_tb_pessoa(identidade text, nome_pessoa
text)
RETURNS void AS
$BODY$
INSERT INTO tb_pessoa
SELECT
$1 as rg,
$2 as nome
WHERE
$1 NOT IN (SELECT rg FROM tb_pessoa)$BODY$
LANGUAGE 'sql' VOLATILE;
ALTER FUNCTION insert_into_tb_pessoa(identidade text,
nome_pessoa text) OWNER TO pgsql;
E depois chamar:
SELECT insert_into_tb_pessoa('1989994','Otacílio');
SELECT insert_into_tb_pessoa('1989995','Eli
medeiros');
Chame a função várias vezes ou execute o comando
INSERT INTO tb_pessoa
SELECT
'1989994' as rg,
'Otacilio' as nome
WHERE
'1989994' NOT IN (SELECT rg FROM tb_pessoa)
várias vezes e depois olhe a tabela. Ele só inseriu um
único registro de cada.
Você pode também escrever uma função em plpgsql que
apenas captura o erro de violação de chave primária e
não faz nada quando isto ocorrer. O link abaixo trata
disto:
http://www.postgresql.org/docs/8.1/interactive/plpgsql-control-structures.html#PLPGSQL-ERROR-TRAPPING
_______________________________________________________
Abra sua conta no Yahoo! Mail: 1GB de espaço, alertas de e-mail no celular e
anti-spam realmente eficaz.
http://br.info.mail.yahoo.com/_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
http://www.postgresql.org.br