質問: 下記のようにCREATE TABLE文とCOMMENT ON TABLE文を同時に実行するとエラーになってしまいます。 ``` CREATE TABLE t_login ( user_key varchar(12) -- ユーザ , ip_address varchar(15) -- IPアドレス , login_date timestamp -- ログイン日時 , PRIMARY KEY (user_key) ); COMMENT ON TABLE t_login IS 'ログインテーブル' ; ``` エラー内容は下記です。 「cannot insert multiple commands into a prepared statement」 別々に実行すれば上手くいくのですが、そういうものなのでしょうか? 何か良い方法をご存知であれば教えてください。
回答: PostgreSQLの提供するAPIには複数のSQLが実行できるものとできないものがあります(これらのAPIは普段ユーザが直接使用するものではなく、PostgreSQL接続ドライバの内部で利用されます)。SQLの実行環境やソースが質問に明記されていませんが、エラーメッセージにある通りプリペアドステートメントが使用出来る環境であればPQexec以外が使用されていると思われます。 > > PQexec > > コマンド文字列には(セミコロンで区切った)複数のSQLコマンドを含めることができます。 > > > PQexecParams > > PQexecと異なり、PQexecParamsは、文字列内に最大でも1つのSQLコマンドを入れることができます。 (セミコロンを入れることはできますが、空でないコマンドを2つ以上入れることはできません。) > > > PQprepare > > この関数はquery文字列からstmtNameという名前のプリペアド文を作成します。 queryは単一のSQLコマンドでなければなりません。 > > > 32.3. コマンド実行関数