sql >> データベース >  >> RDS >> PostgreSQL

SQLはBEGINからデータを取得します。 ...;終わり; Pythonでブロック

    Postgresqlは、実際には1つのコマンドから複数の結果セットを返すことをサポートしていません。この入力をpsqlに渡す場合:

    BEGIN;
    SELECT ...;
    END;
    

    これをクライアント側に分割し、実際に3つのステートメントを実行し、そのうちの2番目だけが結果セットを返します。

    「BEGIN」と「END」は、トランザクションを開始/終了するためのSQLレベルのコマンドです。 (これを行うための低レベルのプロトコルがあるかもしれませんが、私は覚えていません)。おそらく直接発行するのではなく、ドライバー(psycopg2)にこれを処理させます。たとえば、PerlのDBIでは、接続時にAutoCommit => 0を指定すると、最初のコマンドの前に暗黙的に「BEGIN」が発行されます。次に、$ dbh-> commitを明示的に呼び出すと、「END」(または「COMMIT」など)になります。 JDBCなどの他のシステムも同様に機能するため、PythonのDB-APIはこのように機能すると思います...



    1. 複数のフィールドを使用して別のテーブルの主キーを参照するMySQL外部キー

    2. カスケード削除制約を追加するにはどうすればよいですか?

    3. PHP oci_connect()TNS:接続識別子を解決できませんでした(ORA-12154)

    4. 文字列フィールドのOraclenullチェック