--- 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

Responder a