問題タブ [plv8]

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 に答える
5277 参照

sql - 任意の型を返すPostgreSQL関数

PostgreSQLの関数が任意の型を返すようにする方法はありますか?

PLV8を使用して、PostgreSQL9.2のJSONタイプからフィールドを取得して比較しようとしています。

次の作品:

countフィールドが10未満の場所を返します。ただし、フィールドが数値でない場合は失敗します。jsonが保持する可能性のあるすべてのタイプのデータに対して特定の関数を作成したくないのですが、データ型を何らかの方法で推測して暗黙的にキャストする方法はありますか?

新しいPostgreSQLJSONデータ型内のフィールドを使用してクエリを実行するにはどうすればよいですか?も参照してください。

0 投票する
5 に答える
5001 参照

javascript - V8 と PostgreSQL を使用した Javascript のシリアル化とパフォーマンス

私は PostgreSQL と、V8 JavaScript エンジンを PostgreSQL に組み込んだPL/V8 を試してきました。これを使用して、データベース内の JSON データにクエリを実行できます。これはかなり素晴らしいことです。

基本的なアプローチは次のとおりです。

V8 を使用して、JSON データを JS に解析し、フィールドを返すことができます。これを通常の pg クエリ式として使用できます。

しかし

大規模なデータセットでは、すべての行でデータを解析する必要があるため、パフォーマンスが問題になる可能性があります。パーサーは高速ですが、間違いなくプロセスの最も遅い部分であり、毎回実行する必要があります。

私が(最終的に実際の質問に到達するために)解決しようとしているのは、JSON をキャッシュまたは前処理する方法があるかどうかです... V8 で使用できるテーブルに JSON のバイナリ表現を格納することさえありますJSオブジェクトが勝つ可能性があるため、自動的に。messagepack や protobuf などの代替フォーマットの使用を検討しましたが、ネイティブの JSON パーサーほど高速になるとは限りません。

考え

PG には BLOB とバイナリ タイプがあるため、データをバイナリで格納できます。必要なのは、これを V8 にマーシャリングする方法だけです。

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

postgresql - Heroku がホストする PostgreSQL と PLV8

Heroku が PLV8 をサポートしているかどうか知っている人はいますか? RailsConf 2012 で、Heroku チームのメンバーがhstore での使用方法について話しているビデオを見ましたが、これは彼らが内部プロジェクトで行っていることだと感じました。「heroku postgresql plv8」をグーグルで検索しても、実際にはあまり表示されません。Heroku チームの誰かがこれを見たら、これがサポートされる可能性がある一般的なタイムラインを投稿してください。

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

postgresql - PLV8 は他のサーバーへの http 呼び出しをサポートしていますか?

PLV8 を使用して PostgreSql の関数を作成する場合、PLV8 関数から get/post リクエストで URL を呼び出すことはできますか?

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

postgresql - Javascript lib または再利用可能な関数を使用して、PostgreSQL で YAML を保存およびインデックス付けしますか?

PostgreSQL 9.2 にはネイティブの JSON サポートがあります。ただし、人間が読める構成ファイルを YAML に保存したいと思います。そして、構成ファイルの値のいくつか (すべてではない) にインデックスを付けたいと思います。したがって、私は疑問に思っています:

  1. js-yamlなど、[Yaml を解析するサードパーティの Javascript ライブラリ] を Postgres に含めることは何とか可能ですか。次に、PostgreSQL 9.2 に組み込みの JSON ヘルパーがあるのと同じ方法で、独自の YAML Javascript ヘルパーを作成できます。

または:

  1. 個々の再利用可能な Javascript 関数を宣言することは可能ですか? もしそうなら、YAML のサブセットを解析できる独自の YAML 解析関数 (単純な正規表現に基づく) を追加できます。たとえば、ここにある最上位のキーと値のペアです。

    /li>

最悪のシナリオは、各 PostgreSQL ストアド プロシージャで YAML 解析コードを複製する必要があることです (サード パーティのライブラリを追加したり、再利用可能な関数を宣言したりできない場合)。

(私の場合、パフォーマンスはそれほど重要ではありません。)

(「postgresql plv8 reusable function」および「postgresql plv8 library」についてしばらくグーグルで検索しましたが、関連するものは何も見つかりませんでした)

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

javascript - plv8.elog()を使用せずにplv8で変数の値を取得するには?

plv8.elog() から正しい出力を取得する際に問題が発生しています。まず、Ubuntu 12.10 で pgxn によってインストールされた PostgreSQL 9.2、plv8 1.4.1 を使用しています。ネストされたカーソルループを含み、多数の準備済みステートメントを使用する関数を作成しています。カーソルを適切に閉じて、準備されたステートメントを解放しています。この機能はすべて、さまざまなテーブルに挿入されるレコードであるオブジェクトの配列を生成します。

壊れているのは、オブジェクト内のデータを使用してその配列をループしてクエリ文字列を生成するポイントです。私はコードのこの部分の構築段階にいるので、通常クエリ文字列を実行する時点で、代わりにコンソールに出力しようとします。ここで破損が発生します。

私のテストで生成された 9 つのクエリ文字列を出力すると、そのうちの 7 つだけが表示されます。postgres のログを調べると、2 つのクエリ文字列が欠落していて、最後にクエスチョン マークの付いたひし形のような文字があることがわかりました。基本的に、現在の文字セットでは表示できない文字です。クエリ ジェネレータ コードのすべての部分をテストしましたが、その理由が見つかりません。plv8.elog() 関数または plv8 エンジンの文字列連結機能が何らかの理由で壊れていると思います。

私が抱えている問題は、それが文字列連結機能である場合、クエリ文字列が正しく実行されることを信頼できないことです。関数からコードを削除し、配列内の静的情報を使用して、コードをテストしました。その状況下では問題なく動作するので、コードのその部分に問題がないことはわかっています。

まず、これを見た人はいますか?plv8.elog() からの破損または奇妙な動作? 関数が特定のサイズまたは複雑さになったときにデータが破損することはありませんか? もしそうなら、少なくともそれを回避する方法を見つけることができましたか?

また、 plv8.elog() 関数の場合、変数の値を取得する別の方法はありますか? v8 デバッガー機能があることはわかっていますが、それを機能させることに成功していません。誰かがそれを機能させた経験がある場合は、それも機能させるのを手伝ってもらえますか? ありがとう。

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

postgresql - PostgreSQL: plv8.start_proc

configで起動手順を設定する

作成された関数:

postgres ユーザーの下では、すべてがうまく機能します。

結果 - ジョン、こんにちは!次に、ユーザーテストを作成し、関数を実行しようとしました:

plv8_startupの実行時にユーザーテストを許可しようとしました-結果は同じです。なにが問題ですか?

0 投票する
0 に答える
694 参照

postgresql - Postgres plv8 - カスタム エラー - カスタム プロパティを失う

カスタム エラーでカスタム プロパティが失われる

問題を再現する手順は次のとおりです。

関数を作成する

トリガー関数を作成する

イベントの代わりに任意のテーブルにこのトリガーを設定し、それを実行してみてください

様子を見よう

期待される出力は何ですか?

これを1つのスコープで行うと、正しい結果が得られます

結果:

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

postgresql - plv8関数によって無視される不変の厳密

データベースを変更できないという不変の制限があると思いました。

以下は、「some_table」に新しい行を挿入します。

関数がデータベースを変更するのを防ぐことはできませんか?