私はpostgresql DBにテーブルユーザを持っています。このテーブルには、jsonbタイプのカラム設定が含まれています。ここではjson形式です:postgresql DBのjsonbカラムからデータを取得して配列として返します。空の結果を返します。
{
"device": {
"352fef5aa349d63c": {
"fcm": "Rg_4rdTaPwifTh-sP8gtRdI7VdMO_sShhuYbEpplVtmSfmIo8kkmqzIaFxfw59QXg3il95Y",
"agent": "android",
"language": "en",
"app_version": 1
},
"3a922f2ead22ecb6": {
"fcm": "MkqSrdTkPwiU32-sPKA_S8I7VdMO_tShhuYbEpplVtmSfmLo6kkmqzIaFxfw59QXg3il94X",
"agent": "android",
"language": "en",
"app_version": 6
}
},
"data": {
"_email": "[email protected]",
"_password": "grmbn9",
"_username": "username",
"_member_id": 57076
},
"email_status": 2,
"email_verify_code": 9579
}
と私は配列内のすべてのデバイスのFCMを返すpostgres関数を書く必要があります。 ここに私の機能です。
CREATE OR REPLACE FUNCTION GetUserFCM(userId int)
RETURNS TEXT[]
AS $$
DECLARE user_devices jsonb;
DECLARE result TEXT[];
DECLARE fcm TEXT[];
DECLARE tmp TEXT;
BEGIN
SELECT setting->'device' into user_devices FROM public."user" WHERE id = userId;
SELECT ARRAY(SELECT jsonb_object_keys((SELECT setting->'device' FROM public."user" WHERE id = userId)::jsonb)) into result;
FOR i IN 1 .. array_upper(result, 1)
LOOP
tmp := user_devices->i->'fcm';
IF tmp IS NULL THEN
PERFORM array_append(fcm, tmp);
END IF;
END LOOP;
RETURN fcm;
END
$$
LANGUAGE plpgsql;
と私は
SELECT GetUserFCM(33) as result;
を実行したとき、それは何も返しません。どのようにjsonオブジェクトからデバイスのFCMを取得することができます助けてください。 FCMを取得するには他の方法がありますか?
あなたのPostgresのバージョンは何ですか... –
を私は、PostgreSQL-9.4を使用してい@VaoTsun?。 –