Recetas PostgreSQL: cURL: obtener, publicar y ... correo electrónico

Para preparar cURL en PostgreSQL, necesitamos el propio postgres y su extensión pg_curl . (Le di enlaces a mis postgres de fork, porque hice algunos cambios que aún no se han podido incluir en el repositorio original. También puede usar la imagen preparada ).

Para comenzar, instale la extensión con el comando

CREATE EXTENSION pg_curl 

Para obtener la solicitud, cree una función

 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$; 

Para la solicitud de publicación codificada por urlen, cree una función

 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$; 

Para la solicitud de publicación json, cree una función

 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$; 

Para enviar correo, cree una función

 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$; 

Y todo esto se puede hacer de forma asíncrona en segundo plano utilizando el programador .

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


All Articles