2

この文脈に頭を悩ませています。これは、いくつかの組み込み関数を使用した私の最初の見解です。

これまでに試したこと

SELECT json_build_object('id', MD5(c.id), 'firstName', 
c.first_name, 'lastName', c.last_name, 'location', 
json_build_object('city', cl.city, 'state', cl.state))
FROM person p 
LEFT JOIN (SELECT id, city, state FROM 
person_location) pl ON pl.id = p.id
LIMIT 10

この小さな例では十分に機能し、10 行も返します。制限を外すと、すべての行が取得されます。完全; ただし、これはデータを Logstash に直接フィードするビューを強化することを目的としているため、フィールドをクリーンアップしてその他の簡単なタスクを実行するカスタム ビジネス ロジックがいくつかあります。これを改善するには、 plv8 を試すのが理にかなっています

plv8 メソッド:

CREATE OR REPLACE FUNCTION generate_search_documents()   
RETURNS SETOF person_test AS
$$

const _ = require('lodash'),
    candidates = plv8.execute('select * FROM candidate LIMIT 10');

plv8.return_next(people);

$$
  LANGUAGE plv8;

そして、私はすでにすぐに迷っています。私がやろうとしているのは、適切な結合で必要なテーブルを選択し、データをクリーンアップして、JSON オブジェクトを構築し、行ごとに 1 つ返すことです。最初の方法では、クエリで 1 人の人物のコンテキスト内で作業していることは明らかです。以下のメソッドでは、テーブル内の 8,000 万人すべてを選択するクエリを実行しているように見えます。それは簡単ではありません。

この方法を使用して、最初の例でやろうとしていることを再現する方法はありますか?

4

1 に答える 1