Skip to content

Files

Latest commit

Dec 15, 2023
f400df2 · Dec 15, 2023

History

History
109 lines (81 loc) · 4.17 KB

20210813_02.md

File metadata and controls

109 lines (81 loc) · 4.17 KB

PostgreSQL curl 插件

作者

digoal

日期

2021-08-13

标签

PostgreSQL , curl


背景

https://pgxn.org/dist/pg_curl/1.0.2/

PostgreSQL curl allows most curl actions, including data transfer with URL syntax via HTTP, HTTPS, FTP, FTPS, GOPHER, TFTP, SCP, SFTP, SMB, TELNET, DICT, LDAP, LDAPS, FILE, IMAP, SMTP, POP3, RTSP and RTMP

get

CREATE OR REPLACE FUNCTION get(url TEXT) RETURNS TEXT LANGUAGE SQL AS $BODY$  
    WITH s AS (SELECT  
        curl_easy_reset(),  
        curl_easy_setopt_url(url),  
        curl_easy_perform(),  
        curl_easy_getinfo_response()  
    ) SELECT convert_from(curl_easy_getinfo_response, 'utf-8') FROM s;  
$BODY$;  

urlencoded post

CREATE OR REPLACE FUNCTION post(url TEXT, request JSON) RETURNS TEXT LANGUAGE SQL AS $BODY$  
    WITH s AS (SELECT  
        curl_easy_reset(),  
        curl_easy_setopt_url(url),  
        curl_easy_setopt_copypostfields((  
            WITH s AS (  
                SELECT (json_each_text(request)).*  
            ) SELECT convert_to(array_to_string(array_agg(concat_ws('=',  
                curl_easy_escape(key),  
                curl_easy_escape(value)  
            )), '&'), 'utf-8') FROM s  
        )),  
        curl_easy_perform(),  
        curl_easy_getinfo_response()  
    ) SELECT convert_from(curl_easy_getinfo_response, 'utf-8') FROM s;  
$BODY$;  

json post

CREATE OR REPLACE FUNCTION post(url TEXT, request JSON) RETURNS TEXT LANGUAGE SQL AS $BODY$  
    WITH s AS (SELECT  
        curl_easy_reset(),  
        curl_easy_setopt_url(url),  
        curl_header_append('Content-Type', 'application/json; charset=utf-8'),  
        curl_easy_setopt_copypostfields(convert_to(request::TEXT, 'utf-8')),  
        curl_easy_perform(),  
        curl_easy_getinfo_response()  
    ) SELECT convert_from(curl_easy_getinfo_response, 'utf-8') FROM s;  
$BODY$;  

send email

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  
        curl_easy_reset(),  
        curl_easy_setopt_url(url),  
        curl_easy_setopt_username(username),  
        curl_easy_setopt_password(password),  
        curl_recipient_append("to"),  
        curl_header_append('Subject', subject),  
        curl_header_append('From', "from"),  
        curl_header_append('To', "to"),  
        curl_mime_data(data, type:=type),  
        curl_easy_perform(),  
        curl_easy_getinfo_headers()  
    ) SELECT curl_easy_getinfo_headers FROM s;  
$BODY$;  

您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.

digoal's wechat