Receitas do PostgreSQL: cURL: get, post e ... email

Para preparar o cURL no PostgreSQL, precisamos do postgres e de sua extensão pg_curl . (Forneci links para o meu fork do postgres, porque fiz algumas alterações que ainda não foram inseridas no repositório original. Você também pode usar a imagem pronta .)

Para começar, instale a extensão com o comando

CREATE EXTENSION pg_curl 

Para obter a solicitação, crie uma função

 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 solicitação de postagem com código de URL, crie uma função

 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 solicitação de postagem do json, crie uma função

 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 email, crie uma função

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

E tudo isso pode ser feito de forma assíncrona em segundo plano usando o agendador .

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


All Articles