В 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
Что я хочу сделать [псевдо]
- Вкл
data_table
обновление (каждый раз, когда обновляется каждая строка) - Проверка (каждая строка обновлена), если (облако (уже было) == True и csv_uploaded (сейчас) == True)
- Отправьте 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
, есть ли способ получить эту информацию напрямую?