PostgreSQL – Desabilitando o autocommit

Olá, pessoal

Como todos nós sabemos o PostgreSQL é autocommit, isto é, ao executar qualquer comando SQL automaticamente este comando é efetivado no banco, porém é possível desabilitar este comportamento.

Para alterar o comportamento padrão faz-se: (Lembrando que esta alteração é realizada na seção e via ambiente psql).

\set AUTOCOMMIT OFF

Verificando a modificação:

\echo :AUTOCOMMIT

OFF

Com a modificação do comportamento padrão é necessário executar o comando COMMIT ou o comando END para que a operação SQL seja efetivada no banco. Caso venha a ocorrer algum erro, a seguinte mensagem é apresentada: current transaction is aborted, commands ignored until end of transaction block e a transação automaticamente é abortada.

Se for desejável que a modificação se torne permanente é necessário realizar esta alteração no arquivo .psqlrc. Este arquivo fica localizado no diretório do usuário (/home/usuario/.psqlrc).

Fiquem a vontade para comentários

[]s

Anúncios

Publicado em 23 de outubro de 2008, em PostgreSQL e marcado como , . Adicione o link aos favoritos. 6 Comentários.

  1. Na verdade, não é o PostgreSQL que efetiva os comandos automaticamente, mas sua interface de linha de comando, o psql.

  2. Olá, Dutra

    O que tentei apresentar é que é possível através do psql modificar o comportamento padrão do PostgreSQL. Acho que minha explicação não ficou tão clara 😦

    Obrigado pela ajuda.

    []s

  3. Não jovem dutra o autocommit é default do postgresql…

    When on (the default), each SQL command is automatically committed upon successful completion. To postpone commit in this mode, you must enter a BEGIN or START TRANSACTION SQL command. When off or unset, SQL commands are not committed until you explicitly issue COMMIT or END. The autocommit-off mode works by issuing an implicit BEGIN for you, just before any command that is not already in a transaction block and is not itself a BEGIN or other transaction-control command, nor a command that cannot be executed inside a transaction block (such as VACUUM).

  4. IMO, ambos estão corretos. A questão é que o postgresql (backend) não possue mais a funcionalidade de desabilitar a gravação automática desde a versão 7.4 (salvo equivoco), porém tal funcionalidade foi transferida para as interfaces de acesso (clientes, nao libPQ), como por exemplo o supra-citado e poderoso psql.
    Como complemento ao interessante artigo, podem ser exemplificadas tentativas de alteração desta feature via backend através do comando: SET AUTOCOMMIT TO OFF; que irá resultar num NOTICE sem alterações do comportamento do PostgreSQL, enquanto que alterações em clientes que construiram esse suporte, como o psql por exemplo, devem funcionar. Só pra fixar: \pset = cliente e set = servidor.

  5. Alexandre Muskus

    Olá pessoal,

    Gostaria de tirar uma duvida.
    Tendo o autocommit desabilitado e ao ocorrer algum erro é apresentada uma mensagem de tal forma generica, current transaction is aborted, commands ignored until end of transaction block.

    Como identificar o erro ocorrido?

    Obrigado pela ajuda,
    Abs.

  6. Olá,

    O erro mais comum é o erro de sintaxe. Sempre antes da mensagem: ERROR: current transaction is aborted, commands ignored until end of transaction block irá aparecer o erro. A dica que dou é sempre verificar antes da mensagem de erro o que pode ter acontecido, mas como mencionei a maioria dos casos é por erro de sintaxe.

    PS: Desculpa pela demora em responder 😦

    Espero ter ajudado.

    []s

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: