問題タブ [pg-promise]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
postgresql - パラメータ化されたクエリのクエリ形式
PostgreSQL で like 句を使用pg-promise
して選択クエリを実行するために使用しています。残念ながら、クエリはエラー コード as08P01
とエラー メッセージで失敗しています
bind メッセージは 1 つのパラメーターを提供しますが、準備済みステートメント "" には 0 が必要です
クエリは次のとおりです
パラメータ化されたクエリを次のように使用しています
クエリの実行に使用される API は次のとおりです。
私は pg-promise の例を見ましたが、パラメーター化されたクエリで LIKE 句を使用していません。
環境の詳細は
pg-約束: 4.3.2
PostgreSQL: 9.6
ノード: 5.7.1
更新: 1query
API (プレーン テキスト SQL)
を使用してクエリを実行できますが、 each
. APIのeach
使用中にLIKE句が失敗する理由を誰か説明してください。Parameterized
javascript - pg-promise による条件付きタスク
私は単にテーブルから値を読み取ろうとしており、追加のクエリの戻り値呼び出しに基づいて、結合された結果を返します。
簡単な例を見てみましょう: table Users
hasid
で、name
がnull でないemailid
場合emailid
、 email テーブルを呼び出して のような結果を返したいとします{ id:[id], name:[name], email:[email]}
。
node.js - pg-promise で返す
pg-promise
Node.js のモジュールを使用して、すべてのクエリを含む別のファイルを作成しました。ほとんどの場合req, res
、クエリの後に使用するだけですが、値を返したい場合があります。それは動作しません。返しますundefined
。
node.js - Postgresql キャッチ トランザクション エラーとロールバック
pg-promiseを使用して SQL クエリを実行しています。クエリ自体は、外部の .sql ファイルに保存されます。
トランザクションを実行すると、Postgres はエラーが発生すると (予想どおり) トランザクションを中止します。私が実行している問題は、トランザクションが中止された後に実行しようとした別のクエリが実行されず、代わりに次のメッセージが表示されることです: 「現在のトランザクションは中止され、コマンドはトランザクションブロックの終わりまで無視されました」 . クエリが psql コンソールで実行されていた場合、失敗したクエリの後に ROLLBACK を発行することで、この問題を解決できました。アプリケーションで使用される SQL は外部ファイルにあるため、ここではオプションではないと思います。また、何かが失敗した場合はトランザクション全体を破棄する必要があるため、セーブポイントはオプションではないと思います。
このエラーが発生した場合、SQL ファイルをどのようにロールバックしますか?
参照用の SQL は次のとおりです。
前もって感謝します!
node.js - pg-promise を使用すると AWS Lambda の実行時間が長くなる理由
AWS Lambda を使用して、SQL クエリを実行して RDS postgres データベースからレコードを取得し、結果に基づいて SQS メッセージ ベースを作成するという非常に単純なタスクを実行し始めました。
aws-sdk
デフォルトでは、Amazon はモジュール (ノード 4.3 エンジンを使用) のみを提供しており、この SQL クエリを実行する必要があるため、を含むカスタム展開パッケージを作成する必要がありますpg-promise
。私が使用しているコードは次のとおりです。
ラムダ関数をテストするとき、WatchLogs を見ると、関数自体の実行には約 500 ミリ秒かかりましたが、実際には 30502.48 ミリ秒かかったことが示されています (スクリーンショットを参照)。
318KB のパッケージを解凍して実行を開始するのに 30 秒かかると思いますか? それは私にとって単なる冗談ですか、それとも何か足りないのですか? zip をアップロードし、パッケージを S3 にアップロードして高速かどうかを確認しようとしましたが、それでもレイテンシーは同じです。
Python バージョンは、カスタム パッケージなしでネイティブに SQL リクエストを実行できることに気付きました...
私たちのアプリケーションはすべて node で書かれているので、そこから離れたくはありませんが、なぜ Amazon がデータベースの相互作用のための基本的な npm モジュールを提供していないのか理解するのに苦労しています.
コメントやヘルプは大歓迎です。この時点で、毎分トリガーされるスクリプトを実行するのに 30 秒かかる場合、Lambda が私たちにとって有益であるかどうかはわかりません...
同じ問題に直面している人はいますか?
更新:これは、接続が不要になったらすぐに接続を閉じる必要がある方法です(Vitalyの助けに感謝します):
node.js - pg-promise を使用した同期プログラミング
私は node.js と pg-promise が初めてで、同期プログラミングのバックグラウンドから来ており、新しい考え方が必要です。
メイン プログラム ロジックの前にデータベースの初期化を実行するシナリオから始めます。
次の例: https://github.com/vitaly-t/pg-promise/wiki/Learn-by-Example#simple-select
私のコードは次のようになりますか:
または、次のように読みます。
私の理解では、後者の場合、レコードが削除される前にメッセージが表示されます。
更新: Promise とコールバックに関する多数の記事を読んだ後、pg-promise は成功とエラーの両方のシナリオで .then と .catch のチェーンを使用することを理解しました。また、pg-promise コマンドは、次のような関数ラッパー内に配置する必要があることも理解していると思います。
次に、コード内から、関数を非同期で実行する単純なコマンドで関数を呼び出します。
ただし、プログラムのほとんどすべてが最初に初期化を完了する必要があるため、この非同期コーディングとプロミスの概念がプログラムの全体的な構造にどのように適合するかはまだわかりません。したがって、プログラム全体を関数の「.then」セクションに配置する必要はありませんか? つまり、最上位の唯一のコードは事実上 intialiseDB() 関数でしょうか?