2010-11-29 26 views
0

個々のファイルをグループPostgreSQLデータベースにマージする作業を進めています。ファイルはすべて完璧に正常に動作していますが、組み合わされても問題なく動作しています。 1つのトリガの作成にハングアップしたので、トリガをコメントアウトしました。我々は、次のエラーを得たマージファイル走った次の時間:このエラーに続いPostgreSQL構文エラーeofによってコミットが発生しました

ERROR: Syntax error at end of input 
LINE 181: --$$ LANGUAGE plpgsql 

は、後続の構文エラーがあったし、その後、私たちの恐怖に私達は私達のログファイルに次を見つけた:

ERROR: Syntax error at end of input 
LINE 181: --$$ LANGUAGE plpgsql 
COMMIT 

このファイルには、データベースに入力する予定のないテストデータが含まれており、データベースのデータ量を知っている人が壊れています。私たちは含まれているすべてのファイルを見て、どこにもCOMMITはありません!

これまで誰かに似たようなことが起こったことはありますか?解析のエラーがコミットを引き起こす理由はありますか?

+0

拡張:コメントの途中でEOFとして解釈され、解析が継続され、エラーが発生して何らかの形でバイトがコミットされたと考えられます。以前の状態にデータベースを戻すことが可能かどうか誰にも知られていますか?これは非常に有害で、手動で再構築する時間はありません!! –

答えて

2

BEGINステートメントがない場合、PostgreSQL接続は、ステートメントの実行後に各変更をコミットする「自動コミット」モードになります。コードを間違ってコメントしているので、コードの前半にあるBEGINのステートメントにコメントしたと言いたいと思います。しかし、あなたはあなたのSQLを提供していないので、私は確信できません。

注構文こと:

--$$ 

は機能$$の終わりをコメントアウトしません。それが意味することは、文字列の中の最後のものとして空のコメントです。

-- 
$$ 

「コメントされた」行に解析エラーが表示されるのは、このためです。実際にコメントされていれば、PostgreSQLは解析しません。 $$は、SQLコードを囲む引用演算子であり、引用用に'を使用しない場合の便利な構文です(これは、引用符付きのSQL内の各引用符を二重引用符で囲む必要があることを意味します)。コメントアウトされた行だと思っていたのは、実際には2つのハイフンで終わる文字列でした。

一般的な注意点:コードに説明を追加し、コードのセクションを無効にしない場合にのみ、コメントを使用する必要があります。古いバージョンのコードにアクセスする必要がある場合は、バージョンコントロールを使用します。

編集:引用符付き文字列の説明を明確にしました。これが今より意味をなさないことを願っています。

+0

これは理にかなっています。これは、この質問を投稿してからわずか数時間で完了した大学プロジェクトのためのものでした。このデータベースクラスを教える教授は、どのSQL(またはこの場合はpostgreSQL)も調べず、TAまで残しています。 TAが行う唯一の事柄は、基本的なテーブルを作成し、それらのテーブルに対して異なる操作を実行するといういくつかの例を簡単に説明します。これらの小さなニュアンス(コードをコメントアウトしていないコメント)は決して説明されませんでした。大きな合併症を引き起こした。この非常に明確なことを大変ありがとう。 –

関連する問題