[SQL] 어떻게 PostgreSQL의 트리거에서 이메일을 보낼 수 있습니까?
SQL어떻게 PostgreSQL의 트리거에서 이메일을 보낼 수 있습니까?
테이블 데이터 집합을 업데이트 할 때 트리거를 설정할 수를 pgsql을 사용하여, (완료로 상태를 변경) 그것은 자동 보내기 데이터 집합 이메일 값을 사용하여 이메일 계정으로 이메일 및 서버에서이 이메일을 저장합니다
하지만 난 서버에서 이메일 및 전송 이메일을 보내도록 트리거 기능에 작성하는 방법을 모르겠어요. 사전에 감사합니다
대학원 버전은 9.1이며, CentOS는 5.8
CREATE OR REPLACE FUNCTION sss()
RETURNS trigger AS
$BODY$begin
if(NEW.publisher== 'aaaa')
then
//send email and save to server 192.168.171.64
end if;
return NEW;
end
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION sss()
OWNER TO postgres;
GRANT EXECUTE ON FUNCTION sss() TO postgres;
해결법
-
==============================
1.우수한로서의 일반적인 depesz 기사 및 PG-메시지 큐를 참조하십시오.
우수한로서의 일반적인 depesz 기사 및 PG-메시지 큐를 참조하십시오.
데이터베이스에서 직접 이메일을 보내는 것은 좋은 생각되지 않을 수 있습니다. DNS 해상도는 30 다음 초 시간에 대한 느리고 모든 것을 중단 무엇 벗어나면? 어떤 메일 서버가 불안정한를 가진 5 분의 메시지를 수락 할 걸리는 경우 어떻게해야합니까? 당신은 당신이 MAX_CONNECTIONS에 때까지 데이터베이스 세션이 트리거에 걸린거야 갑자기 당신은 아무것도 할 수 있지만 기다리거나 거래를 취소 수동으로 시작합니다.
내가 권하고 싶습니다 당신의 트리거가 영구적으로 실행하고 (그러나 트랜잭션 단위) DB에 연결되어 청취 도우미 스크립트를 NOTIFY 가지고있다.
트리거가 수행하는 모든 큐 테이블에 행을 삽입하고이 NOTIFY 보낼 수 있습니다. 스크립트는이 그것을 수신하도록 등록되어 있기 때문에이 NOTIFY 메시지를 가져 큐 테이블을 검사하고 나머지는 않습니다.
당신은 언어가 편리하다 어떤에서 도우미 프로그램을 작성할 수 있습니다; 나는 보통 psycopg2 파이썬을 사용합니다.
즉, 스크립트는 데이터베이스에서 찾은 정보를 기준으로 전자 메일을 보낼 수 있습니다. 당신은, 당신이 대신 더 강력한 스크립팅 언어의 템플릿으로 일을 대체 할 수있는 모든에게 PL / pgSQL의에서 서식 추한 텍스트를해야하고,이 들어올 NOTIFY 때 바로 데이터베이스에서 변수 데이터를 가져 오지 않습니다.
이 방법 도우미는 각 메시지를 보낼 만 한 후 큐 테이블에서 정보를 제거 할 수 있습니다. 실패 보내기 원인 메일 시스템에 일시적인 문제가있는 경우 그 방법은, 당신은 정보를 손실하지 않은 당신이 성공 될 때까지 전송을 시도 계속할 수 있습니다.
당신이 정말로 데이터베이스에서이 작업을 수행해야하는 경우, PgMail를 참조하십시오.
-
==============================
2.포스트 그레스 수퍼 유저 경우는 윈도우에서 작동합니다. 트리거 기능은 SECURITY DEFINER해야한다. 리눅스 센드 메일에 대한 유사 :
포스트 그레스 수퍼 유저 경우는 윈도우에서 작동합니다. 트리거 기능은 SECURITY DEFINER해야한다. 리눅스 센드 메일에 대한 유사 :
... copy ( select 'my email body' ) to program 'blat -to to@example.com -from from@example.com -subject "My Subject" -server localhost:25' with ( format text ); ...
~ 60 밀리
-
==============================
3.당신은 메일을 보낼 plperlu를 사용할 수 있습니다.
당신은 메일을 보낼 plperlu를 사용할 수 있습니다.
이 링크는 트리거에 그것을 사용하는 방법의 예를 보여줍니다.
-
==============================
4.당신은 pgMail을 (당신이 그것을 설치할 수있는 경우)를 사용 할 수있을 :
당신은 pgMail을 (당신이 그것을 설치할 수있는 경우)를 사용 할 수있을 :
당신이 brandolabs.com의 지시에 따라 경우가 내려 온다
pgmail('Send From ','Send To ','Subject goes here','Message body here.')
-
==============================
5.나는 @Craig 벨소리에 동의합니다. 당신은 코드의 100 개 라인에서 파이썬 뭔가를 코딩 할 수있다. psycopg2, smtplib : 나는 다음과 같은 파이썬 라이브러리를 사용하는 것이 좋습니다 것입니다. 변경 사항을 통보받을하고자하는 빈도에 따라 (작업 환경에 따라 다름) cronjob에를 실행할 수 있습니다. 그 방법은 오히려 알림에게 변화가 이루어지는 모든 시간을 보내는 것보다 하나의 이메일로 데이터베이스에 여러 변화를 집계 할 수 있습니다.
나는 @Craig 벨소리에 동의합니다. 당신은 코드의 100 개 라인에서 파이썬 뭔가를 코딩 할 수있다. psycopg2, smtplib : 나는 다음과 같은 파이썬 라이브러리를 사용하는 것이 좋습니다 것입니다. 변경 사항을 통보받을하고자하는 빈도에 따라 (작업 환경에 따라 다름) cronjob에를 실행할 수 있습니다. 그 방법은 오히려 알림에게 변화가 이루어지는 모든 시간을 보내는 것보다 하나의 이메일로 데이터베이스에 여러 변화를 집계 할 수 있습니다.
from https://stackoverflow.com/questions/12002662/how-can-i-send-email-from-postgresql-trigger by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 오라클의 CLOB 컬럼을 조회하는 방법 (0) | 2020.04.15 |
---|---|
[SQL] 왜 SQL에는 제품 집계 함수가 없다? (0) | 2020.04.15 |
[SQL] 시간 중복에 대한 테이블을 확인? (0) | 2020.04.15 |
[SQL] SQL - 어떻게 트랜스 하는가? (0) | 2020.04.15 |
[SQL] (*) 또는 카운트 더 나은 MYSQL 수있는 무엇입니까 (1)? (0) | 2020.04.15 |