問題タブ [node-postgres]

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.

0 投票する
1 に答える
36 参照

postgresql - pg ダンプ後にテーブルに挿入

以前pg_dumpは、新しいデータベースにテーブルを作成していました。その後default autoincrementer、シリアルキーの を使用してテーブルに行を挿入できるようにしたいと考えています。これが私がテーブルに持っているものです:

このtable (smtable)では、aがキーです ( として設定serial)。

今、次のステートメントを実行すると:

次のエラーが表示されます。

next_keyこのステートメントをテーブルに挿入するにはどうすればよいですか..

0 投票する
3 に答える
2403 参照

node.js - node-postgres : クエリが順番に実行されていません

私は挿入と更新のコードを2つの異なるファイルに保持しており、条件に基づいて常に挿入を最初に実行してから更新する必要があります。しかし、どういうわけか更新が最初に実行され、次に挿入されます

test.js : 簡略化されたコード

私はこれらのパッケージを使用しています:pguuid

出力

ノート :

この問題はasyncを使用することで簡単に解決できます。しかし、私の挿入コードと更新コードは別のファイルにあり、状況によっては更新コードが実行される可能性があります。したがって、async を使用したくありません。

問題

挿入クエリが最初に実行されるのに、更新が出力で最初に終了するのはなぜですか

何か不足していますか..?

0 投票する
2 に答える
138 参照

node.js - Node.js Postgres Wiki の例で、http 要求ごとに複数のレコードが挿入されるのはなぜですか?

アプリにnode-postgres ( pgNPM 上)を使用していますが、問題があったため、Wikiのに戻ることにしました。

https://github.com/brianc/node-postgres/wiki/Example

この例を実行すると、 http要求によって2 つのレコードが Postgres ("visit") テーブルに挿入されます。これは望ましい動作ですか...?

サンプル コードを Heroku に公開しました: https://node-postgres-example.herokuapp.com
(注: Google Chromeを使用してアクセスしてください)

注: Wiki のコードに 3 つの変更を加えて、server.jsHeroku で実行できるようにしました。これは GitHub にあります: https://github.com/dwyl/postgres-connection-pool-test

( server.js に加えた変更は、(1)visitテーブルがまだ存在しない場合はテーブルを作成するため、(2) postgres 接続文字列を取得するため、process.env.DATABSE_URL(3) Heroku でリッスンするprocess.env.PORTためだけです。残りのすべてのコードは Wiki の例のとおりです)

0 投票する
2 に答える
2399 参照

postgresql - postgres:パラメーター付きのクエリから実行可能なクエリを取得する

$ パラメータを使用してクエリから実行可能なクエリを取得する方法はありますか?

私はnode-postgresを使用しています

これは私が必要なものです

0 投票する
2 に答える
3082 参照

node.js - 一時テーブルを使用して postgres 関数を呼び出すノードが「メモリ リーク」を引き起こす

get_jobsトランザクション内で、node-postgresbrianc のパッケージを使用して 1 秒間に 18 回、Postgres (Amazon RDS マイクロ インスタンス) 関数を呼び出す node.js プログラムがあります。

ノード コードは、brianc の基本的なクライアント プーリングの例の拡張バージョンにすぎません。

したがって、Postgres は次のようになります。

... 55msごとに繰り返されます。

get_jobsこのような一時テーブルで書かれています

一時テーブル パターンを使用したのは、これjobsが常に からの行の小さな抽出であることを知っているためreally_big_table_1です。(私はこれを SQL Server で非常に効果的に使用しており、現在はクエリ オプティマイザーを信頼していませんが、これが Postgres の間違ったアプローチであるかどうか教えてください!)

クエリは小さなテーブルで 8 ミリ秒 (ノードから測定) で実行され、次のジョブが開始される前に 1 つのジョブ「ポーリング」を完了するのに十分な時間です。

問題: この速度で約 3 時間ポーリングした後、Postgres サーバーがメモリ不足になり、クラッシュします。

すでに試したこと...

  • 一時テーブルなしで関数を書き直せば、Postgres はメモリ不足にはなりませんが、一時テーブル パターンを多用するので、これは解決策ではありません。

  • ノード プログラムを停止すると (クエリの実行に使用する 10 個の接続が強制終了されます)、メモリが解放されます。ポーリング セッション間でノードを 1 分間待機させるだけでは同じ効果が得られないため、プールされた接続に関連付けられた Postgres バックエンドが保持しているリソースが明らかに存在します。

  • ポーリングの実行VACUUM中に a を実行しても、メモリ消費には影響せず、サーバーは停止し続けます。

  • ポーリング頻度を減らしても、サーバーが停止するまでの時間だけが変わります。

  • DISCARD ALL;それぞれの後に追加しCOMMIT;ても効果はありません。

  • s の s の代わりにDROP TABLE jobs; DROP TABLE jobs_extra;afterを明示的に呼び出します。サーバーはまだクラッシュします。RETURN query ()ON COMMIT DROPCREATE TABLE

  • CFrei の提案に従って、pg.defaults.poolSize = 0プーリングを無効にするためにノード コードに追加されました。サーバーはまだクラッシュしましたが、以下の最初のスパイクのように見えた以前のすべてのテストよりもはるかに時間がかかり、スワップがはるかに高くなりました (2 番目のスパイク)。後で、pg.defaults.poolSize = 0 プーリングが期待どおりに無効にならない可能性があることがわかりました。

Postgres サーバーのスワップ メモリ使用量

  • これに基づいて、自動バキュームでは一時テーブルにアクセスできません。したがって、適切なバキューム操作と分析操作は、セッション SQL コマンドを介して実行する必要があります。」、VACUUMノード サーバーからa を実行しようとしましVACUUMた ("inセッション」コマンド)。私は実際にこのテストを機能させることができませんでした。データベースに多くのオブジェクトがありVACUUM、すべてのオブジェクトを操作しているため、各ジョブの繰り返しの実行に時間がかかりすぎていました。一時テーブルのみに制限VACUUMすることは不可能でした - (a) 実行できませんVACUUMトランザクション内および (b) トランザクション外では、一時テーブルは存在しません。pg_attributes:P 編集: Postgres IRC フォーラムの後半で、VACUUM は一時テーブル自体には関係ないが、その TEMP TABLES の原因で作成および削除された行をクリーンアップするのに役立つ可能性があると有益なチャップが説明しました。いずれにせよ、「セッション中」の VACUUM は答えではありませんでした。

  • DROP TABLE ... IF EXISTSCREATE TABLEの代わりに、の前にON COMMIT DROP。サーバーはまだ死んでいます。

  • CREATE TEMP TABLE (...)insert into ... (select...)代わりにCREATE TEMP TABLE ... AS、の代わりにON COMMIT DROP。サーバーが死ぬ。

ではON COMMIT DROP、関連するすべてのリソースを解放していませんか? 他に何が記憶を保持している可能性がありますか? どうすれば解放できますか?

0 投票する
1 に答える
591 参照

node.js - out パラメータの結果は、ノード pg モジュールによって返されます - postgresql

以下のようにpostgresqlでプロシージャを作成しました。

これで、ノード pg からこの手順を次のように実行しました。

以前、上記のコードを実行すると、次の形式の結果が得られました。

しかし、今はノード pg モジュールをアンインストールし、ノード pg モジュールを再度インストールしました。次の形式で結果が得られます

したがって、違いは、レコードの名前と値のペアを返す代わりに、関数名と値の配列を返すことです。別のバージョンの node pg モジュールをインストールしようとしましたが、問題は解決しません。

前もって感謝します。