この文脈に頭を悩ませています。これは、いくつかの組み込み関数を使用した私の最初の見解です。
これまでに試したこと
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 万人すべてを選択するクエリを実行しているように見えます。それは簡単ではありません。
この方法を使用して、最初の例でやろうとしていることを再現する方法はありますか?