Postgres: создание функции для отправки HTTP POST при обновлении - PullRequest
0 голосов
/ 13 февраля 2020

В PostgreSQL у меня есть таблица data_table, которая выглядит примерно так:

 data_id | machine |     run      | cell  | run_start  |    library    |                   expected_dir                    | transferred | failed | cloud | csv_uploaded |         last_updated          
---------+---------+--------------+-------+------------+---------------+---------------------------------------------------+-------------+--------+-------+--------------+-------------------------------
       1 | mach_1  | RUN0001      | cell1 | 2020-02-11 | lib_00_001    |                                                   | t           | f      | t     | t            | 2020-02-12 10:42:05.033648+00

Что я хочу сделать [псевдо]

  1. Вкл data_table обновление (каждый раз, когда обновляется каждая строка)
  2. Проверка (каждая строка обновлена), если (облако (уже было) == True и csv_uploaded (сейчас) == True)
  3. Отправьте HTTP-запрос POST на URL, POST'ing информацию из строки, с которой он работает

Что у меня есть

CREATE OR REPLACE FUNCTION parse_information_to_convert()
RETURNS TRIGGER AS
$BODY$
    import requests 
    address = "www.someaddress.com"
    data = { "some_data": "some_value"}
    if (data_id = NEW.data_id and OLD.cloud = TRUE and OLD.csv_uploaded = FALSE and NEW.csv_uploaded = TRUE):        
        r = requests.post(address, json=data)
    else:
        r = request.post(address, json ={ "Message": "incorrect sql"} )
$BODY$
LANGUAGE plpython3u;
CREATE TRIGGER http-post-func
AFTER UPDATE
ON data_table
FOR EACH ROW
EXECUTE PROCEDURE parse_information_to_convert();

Проблемы

I получить эту ошибку:

ERROR:  could not compile PL/Python function "parse_information_to_convert"
DETAIL:  SyntaxError: invalid syntax (<string>, line 6)

Во-вторых, при использовании plpython3u у меня есть 2 вопроса: 1. Я хочу data, чтобы получить данные из строки, к которой они обращаются, чтобы я мог опубликовать это как HTTP request

data = {
    "data_id": "",
    "machine": "",
    "run": "",
    "cell":"",
    "library":""
}

Как я могу разобрать эту информацию? Нужно ли использовать psycopg2, как обычно в Python? Или, поскольку это функция postgres, есть ли способ получить эту информацию напрямую?

...