PostgreSQL-Rezepte: cURL: Abrufen, Veröffentlichen und ... E-Mail

Um cURL in PostgreSQL vorzubereiten, benötigen wir postgres selbst und seine Erweiterung pg_curl . (Ich habe Links zu meinen Fork-Postgres angegeben, da ich einige Änderungen vorgenommen habe, die noch nicht in das ursprüngliche Repository verschoben werden konnten. Sie können auch das vorgefertigte Image verwenden .)

Installieren Sie zunächst die Erweiterung mit dem Befehl

CREATE EXTENSION pg_curl 

Erstellen Sie eine Funktion, um die Anforderung zu erhalten

 CREATE OR REPLACE FUNCTION get(url TEXT) RETURNS TEXT LANGUAGE SQL AS $BODY$ WITH s AS (SELECT pg_curl_easy_reset(), --  (  ) pg_curl_easy_setopt('CURLOPT_URL', url), --    pg_curl_header_append('Connection', 'close'), --     pg_curl_easy_perform(), --   pg_curl_easy_getinfo_char('CURLINFO_RESPONSE') --     ) SELECT pg_curl_easy_getinfo_char FROM s; --     $BODY$; 

Erstellen Sie für eine urlencodierte Post-Anfrage eine Funktion

 CREATE OR REPLACE FUNCTION post(url TEXT, request JSON) RETURNS TEXT LANGUAGE SQL AS $BODY$ WITH s AS (SELECT pg_curl_easy_reset(), --  (  ) pg_curl_easy_setopt('CURLOPT_URL', url), --    pg_curl_header_append('Connection', 'close'), --     pg_curl_easy_setopt('CURLOPT_COPYPOSTFIELDS', ( --    WITH s AS ( SELECT (json_each_text(request)).* --    json- ) SELECT array_to_string(array_agg(concat_ws('=', --    urlencoded pg_curl_easy_escape(key), pg_curl_easy_escape(value) )), '&') FROM s )), pg_curl_easy_perform(), --   pg_curl_easy_getinfo_char('CURLINFO_RESPONSE') --     ) SELECT pg_curl_easy_getinfo_char FROM s; --     $BODY$; 

Erstellen Sie für eine JSON-Post-Anfrage eine Funktion

 CREATE OR REPLACE FUNCTION post(url TEXT, request JSON) RETURNS TEXT LANGUAGE SQL AS $BODY$ WITH s AS (SELECT pg_curl_easy_reset(), --  (  ) pg_curl_easy_setopt('CURLOPT_URL', url), --    pg_curl_header_append('Content-Type', 'application/json; charset=utf-8'), --    pg_curl_header_append('Connection', 'close'), --     pg_curl_easy_setopt('CURLOPT_COPYPOSTFIELDS', request::TEXT), --    pg_curl_easy_perform(), --   pg_curl_easy_getinfo_char('CURLINFO_RESPONSE') --     ) SELECT pg_curl_easy_getinfo_char FROM s; --     $BODY$; 

Erstellen Sie eine Funktion, um E-Mails zu senden

 CREATE OR REPLACE FUNCTION email(url TEXT, username TEXT, password TEXT, subject TEXT, "from" TEXT, "to" TEXT[], data TEXT, type TEXT) RETURNS TEXT LANGUAGE SQL AS $BODY$ WITH s AS (SELECT pg_curl_easy_reset(), --  (  ) pg_curl_easy_setopt('CURLOPT_URL', url), --    pg_curl_easy_setopt('CURLOPT_USERNAME', username), --   pg_curl_easy_setopt('CURLOPT_PASSWORD', password), --   pg_curl_recipient_append("to"), --   pg_curl_header_append('Subject', subject), --   pg_curl_header_append('From', "from"), --   pg_curl_header_append('To', "to"), --   pg_curl_mime_data(data, type:=type), --   pg_curl_header_append('Connection', 'close'), --    pg_curl_easy_perform(), --  pg_curl_easy_getinfo_char('CURLINFO_HEADERS') --   ) SELECT pg_curl_easy_getinfo_char FROM s; --   $BODY$; 

Und das alles kann mit dem Scheduler asynchron im Hintergrund erfolgen.

Source: https://habr.com/ru/post/de456736/


All Articles