PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

SQL obtém dados de BEGIN; ...; FIM; bloquear em python


O Postgresql na verdade não suporta o retorno de vários conjuntos de resultados de um único comando. Se você passar esta entrada para o psql:
BEGIN;
SELECT ...;
END;

ele dividirá isso do lado do cliente e realmente executará três instruções, das quais apenas a segunda retornará um conjunto de resultados.

"BEGIN" e "END" são comandos de nível SQL para iniciar/terminar uma transação. (Pode haver um protocolo de nível inferior para fazer isso, mas não me lembro). Você provavelmente não deseja emiti-los diretamente, mas sim que seu driver (psycopg2) lide com isso. Por exemplo, com o DBI do Perl eu especifico AutoCommit=>0 ao conectar e ele implicitamente emite um "BEGIN" antes do meu primeiro comando; e então "END" (ou "COMMIT" etc) quando eu chamo explicitamente $dbh->commit; Eu acho que a API de banco de dados do Python funciona assim, já que outros sistemas, como o JDBC, também funcionam ...