복붙노트

[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. ==============================

    1.우수한로서의 일반적인 depesz 기사 및 PG-메시지 큐를 참조하십시오.

    우수한로서의 일반적인 depesz 기사 및 PG-메시지 큐를 참조하십시오.

    데이터베이스에서 직접 이메일을 보내는 것은 좋은 생각되지 않을 수 있습니다. DNS 해상도는 30 다음 초 시간에 대한 느리고 모든 것을 중단 무엇 벗어나면? 어떤 메일 서버가 불안정한를 가진 5 분의 메시지를 수락 할 걸리는 경우 어떻게해야합니까? 당신은 당신이 MAX_CONNECTIONS에 때까지 데이터베이스 세션이 트리거에 걸린거야 갑자기 당신은 아무것도 할 수 있지만 기다리거나 거래를 취소 수동으로 시작합니다.

    내가 권하고 싶습니다 당신의 트리거가 영구적으로 실행하고 (그러나 트랜잭션 단위) DB에 연결되어 청취 도우미 스크립트를 NOTIFY 가지고있다.

    트리거가 수행하는 모든 큐 테이블에 행을 삽입하고이 NOTIFY 보낼 수 있습니다. 스크립트는이 그것을 수신하도록 등록되어 있기 때문에이 NOTIFY 메시지를 가져 큐 테이블을 검사하고 나머지는 않습니다.

    당신은 언어가 편리하다 어떤에서 도우미 프로그램을 작성할 수 있습니다; 나는 보통 psycopg2 파이썬을 사용합니다.

    즉, 스크립트는 데이터베이스에서 찾은 정보를 기준으로 전자 메일을 보낼 수 있습니다. 당신은, 당신이 대신 더 강력한 스크립팅 언어의 템플릿으로 일을 대체 할 수있는 모든에게 PL / pgSQL의에서 서식 추한 텍스트를해야하고,이 들어올 NOTIFY 때 바로 데이터베이스에서 변수 데이터를 가져 오지 않습니다.

    이 방법 도우미는 각 메시지를 보낼 만 한 후 큐 테이블에서 정보를 제거 할 수 있습니다. 실패 보내기 원인 메일 시스템에 일시적인 문제가있는 경우 그 방법은, 당신은 정보를 손실하지 않은 당신이 성공 될 때까지 전송을 시도 계속할 수 있습니다.

    당신이 정말로 데이터베이스에서이 작업을 수행해야하는 경우, PgMail를 참조하십시오.

  2. ==============================

    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. ==============================

    3.당신은 메일을 보낼 plperlu를 사용할 수 있습니다.

    당신은 메일을 보낼 plperlu를 사용할 수 있습니다.

    이 링크는 트리거에 그것을 사용하는 방법의 예를 보여줍니다.

  4. ==============================

    4.당신은 pgMail을 (당신이 그것을 설치할 수있는 경우)를 사용 할 수있을 :

    당신은 pgMail을 (당신이 그것을 설치할 수있는 경우)를 사용 할 수있을 :

    당신이 brandolabs.com의 지시에 따라 경우가 내려 온다

    pgmail('Send From ','Send To ','Subject goes here','Message body here.')
    
  5. ==============================

    5.나는 @Craig 벨소리에 동의합니다. 당신은 코드의 100 개 라인에서 파이썬 뭔가를 코딩 할 수있다. psycopg2, smtplib : 나는 다음과 같은 파이썬 라이브러리를 사용하는 것이 좋습니다 것입니다. 변경 사항을 통보받을하고자하는 빈도에 따라 (작업 환경에 따라 다름) cronjob에를 실행할 수 있습니다. 그 방법은 오히려 알림에게 변화가 이루어지는 모든 시간을 보내는 것보다 하나의 이메일로 데이터베이스에 여러 변화를 집계 할 수 있습니다.

    나는 @Craig 벨소리에 동의합니다. 당신은 코드의 100 개 라인에서 파이썬 뭔가를 코딩 할 수있다. psycopg2, smtplib : 나는 다음과 같은 파이썬 라이브러리를 사용하는 것이 좋습니다 것입니다. 변경 사항을 통보받을하고자하는 빈도에 따라 (작업 환경에 따라 다름) cronjob에를 실행할 수 있습니다. 그 방법은 오히려 알림에게 변화가 이루어지는 모든 시간을 보내는 것보다 하나의 이메일로 데이터베이스에 여러 변화를 집계 할 수 있습니다.

  6. from https://stackoverflow.com/questions/12002662/how-can-i-send-email-from-postgresql-trigger by cc-by-sa and MIT license