Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1iPoKT-0001uX-KN for pgsql-admin@arkaria.postgresql.org; Wed, 30 Oct 2019 13:48:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1iPoKS-00031P-7u for pgsql-admin@arkaria.postgresql.org; Wed, 30 Oct 2019 13:48:04 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1iPoKR-00031I-O7 for pgsql-admin@lists.postgresql.org; Wed, 30 Oct 2019 13:48:03 +0000 Received: from sonic311-13.consmr.mail.bf2.yahoo.com ([74.6.131.123]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1iPoKO-0005Hp-Ox for pgsql-admin@postgresql.org; Wed, 30 Oct 2019 13:48:03 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1572443277; bh=qUx7W6glLCk8OQ9MSMXUK4aL3lAyoTYo3zoOge4ppuo=; h=Date:From:Reply-To:To:Subject:References:From:Subject; b=LdDMDbb5INNqdtMSNemKL1MsxV7RhB0tnAlPTPfD4sZvU6E0LxjoQXAN+qzm/psPiTqGeZXceai2r3XrA0fyzuU6swdQzYDyoZD6hhAwJaBTCRJDqLmA063ciLhtoYF+SYF9e9ptlQN2bTDHiqE6sd0C7du+SXWCcLs2pxh6qZqhV53HJQl/s+FNd8ySCB7rg7lRsGyBYESdXrFS+kTf1Q8aDCvuqeXozzvzA0lcbvdOxi8BsA5ThZAg9oacf7H/PuJhta9fvirvrOZ/jquGDohDat3ukuwnMA5lkKhZthbduTBkdkxeGEBhTtTuVObA0dmog4a8qUK+5qG4brVe3g== X-YMail-OSG: 9EkAr2oVM1n5s8LgykEt2RHrn6.uLm5cTGbYK2OoIxE_nbwfh2NwJHXHJO0Dzip vZhBgpWpif3BEwn3AtRBS0Hxie1Iu2CHhP9TrOSS7P7.YuLfaiPYIe3jLzmwg.MUvskztUjt9z.a b7gBesTHxr9lU9mNVdev2ffEY9LdaeMqvU5AsM6t.9fV5RX3lqfQ0hWlDDi5XsLETXiU2FzK7jFr t4xpr_nA3Thsu0CVKmV3I.7ZPe5RmPY_YmkTMmqH0SQDaLDmrpC.K7qDmVqVA5jwCbVMmeDtVYWM a.b3mnwoNxz2yWKcfITiC8TyQ1MoeEZ08xhlPE_CR.Avo1ETNEHu.fV2go92hUv3Di0tXSzjqPrL aZAd403doh6VImpE5szLaYATPy2Ggx9qz9RvKFAmTev1h_FDnwSWXRW0MOmsTVJ8vrJmmwz4A4_U LRtF3x..kcziWoaSsx3iemIks2v5yImgAQ7U62a1WaT6fAIikncvC.I7NVxjLq90mtJSl7tJOtRr kgc4lQ9v.bGbRdgKAWfakACGOxdQGj7z6lmCAmR3NZdEz_YXR96oO42P5kCo6PkrQilviTJE3AZQ Y1iY57gI6y_4FVfVbGDPcq2vk7vwYA55kBgsIq_LqEzB3P7We86WFGzzWyWmD4UvvL5fqkH_VBUF 6Lk7JHg3gjoQXdLbxCvx9EvoKJoKMgCH2DQo9nuZBLpeiLTKlBfjrR8pwJUlzCIlscJbjvKGpzt2 KsGJ.5Euvh_L6uFGmzODaQhnEBMvk.VrOg3rHQQn7t5HPJF6VqePOQtHY16SKnaXdP43lB1D3Ohg F5c0yQfU5R3R29D_5c7Il1NqTt.VyiW2ZJiRLoTWc2FiUDQr_vOuzve6R3_PjQnK0yu4KARLO3Xm t5AEApEeT_CJ3TaAlJJxVH7G_0g5wST5FWVZcNWsLiZS5xSXV4rCcz8I0xoCh5MLvajRggGCqeVE NHnjCGgpfbiEU.1cUks6C0NE.y1l95yins_xfxrbw_._5KganLFV.naH1On2OpTs.auFo0Xmh_0Y JpRpfdaxX.Jhe6HGBO4TkC6ZFJjmfIqUe1BNnMc28p0rf1vxullSMxe1BsrwG1czDI5GUNe8H4Uq VOxZ7SYOh9cdxwzzGhTSZ5w2MJrK0Ya7t4zV8gy5Hihpr5dDiBshRyBUPFt11biMhA_T5DYEyUnw VLf7ZH_ncn_ZO8JkkVJfXx52oN_BEjHGeS8xz3Ko5pzIz0tX3uMuCbJBvrse1uWX.yEe7Xz12RJe XXby.JYRL7gSRyYDxI0y3XYWoOuEXnF0LPL7.jHOkB3M3gynOiXW_O2WEZr9vdB.1kysT2xvoYhF 6smSIXugBmUJvk6GUhKwW13c_rc6gfw-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic311.consmr.mail.bf2.yahoo.com with HTTP; Wed, 30 Oct 2019 13:47:57 +0000 Date: Wed, 30 Oct 2019 13:45:06 +0000 (UTC) From: Pepe TD Vo Reply-To: Pepe TD Vo To: Pgsql-admin Message-ID: <1282101845.2072668.1572443106316@mail.yahoo.com> Subject: commit & rollback MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_2072667_443950474.1572443106309" References: <1282101845.2072668.1572443106316.ref@mail.yahoo.com> X-Mailer: WebService/1.1.14593 YMailNorrin Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 Content-Length: 33947 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk ------=_Part_2072667_443950474.1572443106309 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hello experts, I have a main functions call the child functions.=C2=A0 If one of the child= function break, I want the main function stop and tell me what the error.= =C2=A0 From my test, if I break one from the main function and no other fun= ctions execute. That's fine, but if I break the child, the main function no= tice the error and still execute the rest of function, which I want it stop= and tell me what caused the error as same as the one break from the main f= unction.=C2=A0 How do I commit and rollback the function. here is my main function script: CREATE OR REPLACE FUNCTION ecisdrdm.pr_merge_staging_tables( OUT v_ret text= )=C2=A0 =C2=A0 RETURNS text=C2=A0 =C2=A0 LANGUAGE 'plpgsql' =C2=A0 =C2=A0 COST 100=C2=A0 =C2=A0 VOLATILE=C2=A0AS $BODY$ =C2=A0 =C2=A0DE= CLARE =C2=A0 =C2=A0v_errorcode=C2=A0 =C2=A0 =C2=A0 text;=C2=A0 =C2=A0v_errormsg= =C2=A0 =C2=A0 =C2=A0 =C2=A0varchar(512);=C2=A0 =C2=A0v_module=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0varchar(32) =3D 'pr_merge_staging_tables';=C2=A0 =C2=A0= v_host varchar(32) =3D inet_server_addr(); begin PERFORM ecisdrdm.pr_write_error_log( CURRENT_USER, v_host, v_module, '0', = 'Starting MERGE Process' ); begin v_ret =3D '0'; if v_ret =3D '0' then --- --- Perform the merge on APPLICATION_CDIM ---= =C2=A0 =C2=A0 =C2=A0 PERFORM ecisdrdm.pr_write_error_log( CURRENT_USER, v_h= ost, v_module, '0', 'Started merging STG_APPLICATION_CDIM' ); PERFORM ecis= drdm.pr_mig_stg_application_cdim(); -- TODO: INVESTIGATE HOW TO RECEIVE THE= OUT PARAMETER RETRUNED FROM FUNCTION v_ret =3D '0'; PERFORM ecisdrdm.pr_w= rite_error_log( CURRENT_USER, v_host, v_module, '0', 'Finished merging STG_= APPLICATION_CDIM' ); end if; /* exception =C2=A0 =C2=A0 when others then = GET STACKED DIAGNOSTICS v_ret =3D PG_EXCEPTION_CONTEXT; RAISE INFO 'Error N= ame:%',SQLERRM;=C2=A0 =C2=A0 =C2=A0 =C2=A0 RAISE INFO 'Error State:%', SQL= STATE;=C2=A0 =C2=A0 =C2=A0 =C2=A0 RAISE INFO 'Error Context:%', v_errorcod= e; */ end; ---- ---=C2=A0 2. STG_BNFT_CURR_FACT ----=C2=A0 =C2=A0 if v_ret =3D '0' th= en --- --- Perform the merge on BNFT_CURR_FACT --- PERFORM ecisdrdm.pr_write_error_log( CURRENT_USER, v_host, v_module, '0', = 'Started merging STG_BNFT_CURR_FACT' ); PERFORM ecisdrdm.pr_mig_stg_bnft_c= urr_fact(); -- TODO: INVESTIGATE HOW TO RECEIVE THE OUT PARAMETER RETRUNED = FROM FUNCTION v_ret =3D '0'; PERFORM ecisdrdm.pr_write_error_log( CURRENT_= USER, v_host, v_module, '0', 'Finished merging STG_BNFT_CURR_FACT' ); end = if; ---- --=C2=A0 3. STG_BNFT_FACT ----=C2=A0 =C2=A0 if v_ret =3D '0' then ---= --- Perform the merge on BNFT_FACT ---=C2=A0 =C2=A0 =C2=A0 PERFORM ecisdrd= m.pr_write_error_log( CURRENT_USER, v_host, v_module, '0', 'Started merging= STG_BNFT_FACT' ); PERFORM ecisdrdm.pr_mig_stg_bnft_fact(); -- TODO: INVES= TIGATE HOW TO RECEIVE THE OUT PARAMETER RETRUNED FROM FUNCTION v_ret =3D '0= '; PERFORM ecisdrdm.pr_write_error_log( CURRENT_USER, v_host, v_module, '0= ', 'Finished merging STG_BNFT_FACT' ); end if; ---- --=C2=A0 4. STG_BNFT_HIST_ACTN_LDIM ----=C2=A0 =C2=A0 if v_ret =3D '0= ' then --- --- Perform the merge on BNFT_HIST_ACTN_LDIM ---=C2=A0 =C2=A0 = =C2=A0 PERFORM ecisdrdm.pr_write_error_log( CURRENT_USER, v_host, v_module,= '0', 'Started merging STG_BNFT_HIST_ACTN_LDIM ' ); PERFORM ecisdrdm.pr_mi= g_stg_bnft_hist_actn_ldim (); -- TODO: INVESTIGATE HOW TO RECEIVE THE OUT P= ARAMETER RETRUNED FROM FUNCTION v_ret =3D '0'; PERFORM ecisdrdm.pr_write_e= rror_log( CURRENT_USER, v_host, v_module, '0', 'Finished merging STG_BNFT_H= IST_ACTN_LDIM ' ); =C2=A0 =C2=A0 end if; ---- --=C2=A0 5. STG_CNTRY_ST_CDIM ----=C2=A0 =C2=A0 if v_ret =3D '0' then= --- --- Perform the merge on CNTRY_ST_CDIM ---=C2=A0 =C2=A0 =C2=A0 PERFORM= ecisdrdm.pr_write_error_log( CURRENT_USER, v_host, v_module, '0','Started = merging STG_CNTRY_ST_CDIM ' ); PERFORM ecisdrdm.pr_mig_stg_cntry_st_cdim()= ; -- TODO: INVESTIGATE HOW TO RECEIVE THE OUT PARAMETER RETRUNED FROM FUNCT= ION v_ret =3D '0'; PERFORM ecisdrdm.pr_write_error_log( CURRENT_USER, v_ho= st, v_module, '0', 'Finished merging STG_CNTRY_ST_CDIM '); end if; ---- --=C2=A0 6. STG_FRM_CDIM ----=C2=A0 =C2=A0 if v_ret =3D '0' then --- = --- Perform the merge on FRM_CDIM ---=C2=A0 =C2=A0 =C2=A0 PERFORM ecisdrdm.= pr_write_error_log( CURRENT_USER, v_host, v_module, '0', 'Started merging S= TG_FRM_CDIM ' ); PERFORM ecisdrdm.pr_mig_stg_frm_cdim(); -- TODO: INVESTIG= ATE HOW TO RECEIVE THE OUT PARAMETER RETRUNED FROM FUNCTION v_ret =3D '0'; = PERFORM ecisdrdm.pr_write_error_log( CURRENT_USER, v_host, v_module, '0', = 'Finished merging STG_FRM_CDIM ' ); end if; ------ This does the final commit or rollback for the entire merge process.= --- if v_ret =3D '0' then PERFORM ecisdrdm.pr_write_error_log( CURRENT_USER, v= _host, v_module, '0', 'Finished MERGE PROCESS - COMMIT WORK' ); /* commit w= ork; */ COMMIT; else PERFORM ecisdrdm.pr_write_error_log( CURRENT_USER, v_h= ost, v_module, '0', 'Finished MERGE PROCESS - ROLLBACK WORK ' ); /* rollbac= k work; */ ROLLBACK; RAISE NOTICE 'PROGRAM_ERROR'; end if; ------- Exception error handler---- exception=C2=A0 =C2=A0when others then=C2=A0 =C2=A0 =C2=A0 =C2=A0 v_errorco= de :=3D SQLSTATE;=C2=A0 =C2=A0 =C2=A0 =C2=A0 v_errormsg=C2=A0 :=3D SQLERRM; PERFORM ecisdrdm.pr_write_error_log( CURRENT_USER, v_host, v_module, v_err= orcode, v_errormsg); END;$BODY$SECURITY DEFINER; if work fine without "rollback;" and when I put "rollback;" in, I get "inva= lid transaction termination without tell me which child function's error.= =C2=A0 Now, I put it back the way it is w/o commit and rollback.=C2=A0 All = I get is "Finished MERGE PROCESS - ROLL BACK"....=C2=A0the weird thing is e= very single change in the main function, all still stop working. =C2=A0I can't seem to find=C2=A0 anything else a good thing to do with comm= it and rollback, would you please tell me what cause the problem.=C2=A0 Now= all stop only the last statement "merge process - roll back" stated. thank you. Bach-Nga No one in this world is pure and perfect.=C2=A0 If you avoid people for the= ir mistakes you will be alone. So judge less, love and forgive more.To call= him a dog hardly seems to do him justice though in as much as he had four = legs, a tail, and barked, I admit he was, to all outward appearances. But t= o those who knew him well, he was a perfect gentleman (Hermione Gingold) **Live simply **Love generously **Care deeply **Speak kindly.*** Genuinely = rich *** Faithful talent *** Sharing success As I can't seem to find the sc= ript, anything else a good thing to do after doing pg_upgrade to prime the = DB? ------=_Part_2072667_443950474.1572443106309 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hello experts,

I have a main functions call the child functio= ns.  If one of the child function break, I want the main function stop= and tell me what the error.  From my test, if I break one from the ma= in function and no other functions execute. That's fine, but if I break the= child, the main function notice the error and still execute the rest of fu= nction, which I want it stop and tell me what caused the error as same as t= he one break from the main function.  How do I commit and rollback the= function.

here is my main function script:

CREATE OR REPLACE = FUNCTION ecisdrdm.pr_merge_staging_tables(
=09OUT v_= ret text)
   = RETURNS text
  &n= bsp; LANGUAGE 'plpgsql'

    COS= T 100
    VOL= ATILE 
AS $BODY$
=09=09=09=09=09=09=09=09   
DECLARE

   v_errorcode      text;
   v_errormsg     =  varchar(512);
&n= bsp;  v_module         varchar(32) =3D 'pr_me= rge_staging_tables';
&n= bsp;  v_host=09=09=09var= char(32) =3D inet_server_addr();

begin

=09<= /span>PERFORM ecisdrdm.pr_write_error_log( CURRENT_USER, v_host, v_module, = '0', 'Starting MERGE Process' );
=09
<= span style=3D"white-space: pre-wrap;">=09begin
=09v_ret =3D '0';
=09if v_ret =3D '0' then
=09
=09---=
=09--- Perform the merge on APPLICATION_CDIM
<= div>=09---
 =    
=09=09PERFORM ecisdrdm.pr_write_error= _log( CURRENT_USER, v_host, v_module, '0', 'Started merging STG_APPLICATION= _CDIM' );
=09=09
=09=09PERFORM ecisdrdm.pr_mig_stg_application_cdim= ();
=09=09-- TODO: INVESTIGATE HOW TO RECEIVE THE OU= T PARAMETER RETRUNED FROM FUNCTION
=09=09v_ret =3D = '0';
=09=09
=09=09PERFORM ecisdrdm.pr_write_error_log( CURRENT_USER= , v_host, v_module, '0', 'Finished merging STG_APPLICATION_CDIM' );<= /div>
=09=09
=09end if;
= =09=
=09/*
=09=09exception=
=09   =09=09when others then
=09=09=09GET STA= CKED DIAGNOSTICS v_ret =3D PG_EXCEPTION_CONTEXT;
=09=09=09<= /span>RAISE INFO 'Error Name:%',SQLERRM;
        =09RAISE INFO 'Error State:%', SQLSTATE;
=         =09RAISE INFO 'Error Context:%', v_error= code;
=09*/= =09=09
=09=09= =09
=09end;

=09----
=09= ---  2. STG_BNFT_CURR_FACT
=09----
   

=09---
=09-= -- Perform the merge on BNFT_CURR_FACT
=09---=

=09=09PERFORM ecisdrdm.pr_write_error_log( CURRENT_USER, v_host, v_module, '= 0', 'Started merging STG_BNFT_CURR_FACT' );
=09=09
=09=09PERFORM ec= isdrdm.pr_mig_stg_bnft_curr_fact();
=09=09-- TODO: I= NVESTIGATE HOW TO RECEIVE THE OUT PARAMETER RETRUNED FROM FUNCTION
=09=09v_ret =3D '0';
=09=09
=09=09PERFORM ecisdrdm.p= r_write_error_log( CURRENT_USER, v_host, v_module, '0', 'Finished merging S= TG_BNFT_CURR_FACT' );
= =09=09
=09end if;

=09----
=09----=
   
=09if v_ret =3D '0' then
=09---
=
=09--- Perform the merge on BNFT_FACT
=09= ---
     = ;
=09=09PERFORM ecisdrdm.pr_write_error_log( CURRENT= _USER, v_host, v_module, '0', 'Started merging STG_BNFT_FACT' );
=09=09
<= font size=3D"2" color=3D"#cd232c">= =09=09PERFORM ecisdrdm.pr_mig_stg_bnft_fact();
=09= =09-- TODO: INVESTIGATE HOW TO RECEIVE THE OUT PARAMETER RETRUNED FR= OM FUNCTION
=09=09v_ret =3D '0';
=09=09
=09=09PERFORM ecisdrdm.pr_write_error_log( CURRENT_USER, v_host, v_module, '0',= 'Finished merging STG_BNFT_FACT' );
=09
=09end if;

=09----
=09--  4. STG_BNFT_HIST_ACTN_LDIM
=09----
  =  
=09if v_ret =3D '0' then
=09<= /span>---
=09--- Perform the merge on BNFT_HIST_AC= TN_LDIM
=09---
     
=09=09PERFORM ec= isdrdm.pr_write_error_log( CURRENT_USER, v_host, v_module, '0', 'Started me= rging STG_BNFT_HIST_ACTN_LDIM ' );
=09=09
=09=09PERFORM ecisdrdm.pr= _mig_stg_bnft_hist_actn_ldim ();
=09=09-- TODO: INVE= STIGATE HOW TO RECEIVE THE OUT PARAMETER RETRUNED FROM FUNCTION
=09=09v_ret =3D '0';
=09=09
=09=09PERFORM ecisdrdm.pr_w= rite_error_log( CURRENT_USER, v_host, v_module, '0', 'Finished merging STG_= BNFT_HIST_ACTN_LDIM ' );
=09=09
 =  =09end if;

=09-= ---
=09--  5. STG_CNTRY_ST_CDIM
=09----
  =  
=09if v_ret =3D '0' then
=09<= /span>---
=09--- Perform the merge on CNTRY_ST_CDI= M
=09---
     
=09=09PERFORM ecisdrdm= .pr_write_error_log( CURRENT_USER, v_host, v_module, '0','Started merging S= TG_CNTRY_ST_CDIM ' );
= =09=09
=09=09PERFORM ecisdrdm.pr_mig_stg_cntr= y_st_cdim();
=09=09-- TODO: INVESTIGATE HOW TO RECEI= VE THE OUT PARAMETER RETRUNED FROM FUNCTION
=09=09v_= ret =3D '0';
=09=09
=09=09PERFORM ecisdrdm.pr_write_error_log( CURR= ENT_USER, v_host, v_module, '0', 'Finished merging STG_CNTRY_ST_CDIM ');
=09
<= div>=09end if;
=09----
=09--  6. S= TG_FRM_CDIM
=09----
   
=09if v_ret =3D = '0' then
=09---
=09--- Perfor= m the merge on FRM_CDIM
=09---
     
=09=09<= /span>PERFORM ecisdrdm.pr_write_error_log( CURRENT_USER, v_host, v_module, = '0', 'Started merging STG_FRM_CDIM ' );
=09=09
=09=09PERFORM ecisdr= dm.pr_mig_stg_frm_cdim();
=09=09-- TODO: INVESTIGATE= HOW TO RECEIVE THE OUT PARAMETER RETRUNED FROM FUNCTION
<= font size=3D"2" color=3D"#cd232c">= =09=09v_ret =3D '0';
=09=09
=09=09PERFORM ecisdrdm.pr_write_= error_log( CURRENT_USER, v_host, v_module, '0', 'Finished merging STG_FRM_C= DIM ' );
=09
=09end if;

---
--- This does the= final commit or rollback for the entire merge process.
---

=09if v_ret =3D '0' then
=09=09PERFORM ecisdrdm.pr_write_error_log( CURRENT_USER, v_h= ost, v_module, '0', 'Finished MERGE PROCESS - COMMIT WORK' );
<= div>=09=09/*=09commit w= ork; */
=09=09COMMIT;
=09else=
=09=09PERFORM ecisdrdm.pr_write_error_log( CURRENT_= USER, v_host, v_module, '0', 'Finished MERGE PROCESS - ROLLBACK WORK ' );
=09=09/*=09rollback work; */
<= span style=3D"white-space: pre-wrap;">=09=09ROLLBACK;

=09=09RAI= SE NOTICE 'PROGRAM_ERROR';=09=09
=09end if;

---= -
--- Exception error h= andler
----

exception
   when others then
        v_errorcode :=3D SQLSTATE;<= /font>
      &n= bsp; v_errormsg  :=3D SQLERRM;

=09PERFORM ecisdrdm.pr_write_error= _log( CURRENT_USER, v_host, v_module, v_errorcode, v_errormsg);

END;
$BODY$
SECURITY DEFINER;


if work fine without "rollback;" and when I put "= rollback;" in, I get "invalid transaction termination without tell me which= child function's error.  Now, I put it back the way it is w/o commit = and rollback.  All I get is "Finished MERGE PROCESS - ROLL BACK"....&n= bsp;
the weird thing is every single change in the main function, all still sto= p working.

 I can't seem to find  anything else a good thing t= o do with commit and rollback, would you please tell me what cause the prob= lem.  Now all stop only the last statement "merge process - roll back"= stated.

thank you.<= /div>

=
Bach-Ng= a

No one in this world is pure and= perfect.  If you avoid people for their mistakes you will be alone. S= o judge less, love and forgive more.
To = call him a dog hardly seems to do him justice though in as much as he had f= our legs, a tail, and barked, I admit he was, to all outward appearances. B= ut to those who knew him well, he was a perfect gentleman (Hermione Gingold= )

**Live s= imply **Love generously **Care deeply **Speak kindly.
*** Genuinely rich *** Faithful talent *** Sharing success
As I can't seem to find the script, anything el= se a good thing to do after doing pg_upgrade to prime the DB?
------=_Part_2072667_443950474.1572443106309--