Search Postgresql Archives

Re: dblink_connect fails

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Perhaps the attached will help. It's a sample function that I wrote and tested a few years ago on PG v8.3
It worked then, so it should be a good model for you.

On Wed, Dec 16, 2015 at 8:00 PM, Adrian Klaver <adrian.klaver@xxxxxxxxxxx> wrote:
On 12/16/2015 04:53 PM, James Sewell wrote:
No it is not.

Just in case I tried setting it to 'postgres', logged in without -U
(doesn't work without PGUSER set) and tried the operation again.

Do you mean this:

DETAIL:  FATAL:  role "PRDSWIDEGRID01$" does not exist

or that you could not connect for another reason?

If for the original reason, does the role PRDSWIDEGRID01$ actually exist somewhere?



Same result.

Cheers,


James Sewell,
PostgreSQL Team Lead / Solutions Architect
______________________________________

Level 2, 50 Queen St, Melbourne VIC 3000

*P *(+61) 3 8370 8000***W* www.lisasoft.com *F *(+61) 3 8370 8099

On Wed, Dec 16, 2015 at 3:26 PM, Joe Conway <mail@xxxxxxxxxxxxx
<mailto:mail@xxxxxxxxxxxxx>> wrote:

    On 12/15/2015 06:24 PM, James Sewell wrote:
    > I have a Windows PostgreSQL server where dblink_connect fails to pick up
    > the current user as follows:

    >     ffm=# SELECT dblink_connect('master', 'dbname=ffm');
    >     ERROR:  could not establish connection
    >     DETAIL:  FATAL:  role "PRDSWIDEGRID01$" does not exist

    > Has anyone seen this before? It seems very odd to me, I have another
    > identical machine (except for being on 9.4.0) which this works on.


    Do you happen to have a PGUSER variable defined in your environment
    (that is, in the environment as seen by the OS user the postmaster runs
    under)?

    See: http://www.postgresql.org/docs/9.4/static/libpq-envars.html

    Joe

    --
    Crunchy Data - http://crunchydata.com
    PostgreSQL Support for Secure Enterprises
    Consulting, Training, & Open Source Development



------------------------------------------------------------------------
The contents of this email are confidential and may be subject to legal
or professional privilege and copyright. No representation is made that
this email is free of viruses or other defects. If you have received
this communication in error, you may not copy or distribute any part of
it or otherwise disclose its contents to anyone. Please advise the
sender of your incorrect receipt of this correspondence.



--
Adrian Klaver
adrian.klaver@xxxxxxxxxxx


--
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general



--
Melvin Davidson
I reserve the right to fantasize.  Whether or not you
wish to share my fantasy is entirely up to you.

-- Function: test_archive(text, text, text, text, date)

-- DROP FUNCTION test_archive(text, text, text, text, date);

CREATE OR REPLACE FUNCTION test_archive(text, text, text, text, date)
  RETURNS bigint AS
$BODY$
-- CREATED BY: Melvin Davidson
-- DATE: 2008-08-11
-- 
-- Execute this function from archive db
-- General flow
-- 1. Open connection to production db 
-- 2. Insert into archive db as select from with criteria
-- 3. Delete from production db with same criteria
-- 4. Close connection.
-- 5. Return the number of TXMaster (Total) records archived.
--
-- ERROR HANDLING
-- If dblink connection fails, -1 is returned
-- If archive date is >= Current Date, -10 is returned
-- If Total number of transactions inserted does not = TXMaster inserts, 
-- rollback is done and -100 returned
-- If Total number of remote transactions deleted does not = remote TXMaster deletes, 
-- rollback is done and -200 returned

DECLARE
-- Parameter(s)
	p_host_ip			ALIAS FOR $1;
	p_dbname			ALIAS FOR $2;
	p_user			ALIAS FOR $3;
	p_passwd			ALIAS FOR $4;
	p_date			ALIAS FOR $5;

-- Variable(s)
	v_ctr					BIGINT DEFAULT 0;
	v_txmaster_ctr			BIGINT DEFAULT 0;
	v_txassetcycle_ctr		BIGINT DEFAULT 0;
	v_txassetdamaged_ctr		BIGINT DEFAULT 0;
	v_txassetfilledemptied_ctr	BIGINT DEFAULT 0;
	v_txassetfound_ctr		BIGINT DEFAULT 0;
	v_txassetlost_ctr			BIGINT DEFAULT 0;
	v_txassetmoved_ctr		BIGINT DEFAULT 0;
	v_txassetOwnerChanged_ctr	BIGINT DEFAULT 0;
	v_txassetprodasscheck_ctr 	BIGINT DEFAULT 0;
	v_txassetrepaired_ctr		BIGINT DEFAULT 0;
	v_txassettagassigned_ctr	BIGINT DEFAULT 0;
	v_txbillingaction_ctr		BIGINT DEFAULT 0;
	v_txexception_ctr			BIGINT DEFAULT 0;
	v_txorderdetailfilled_ctr	BIGINT DEFAULT 0;
	v_txassettagremoved_ctr		BIGINT DEFAULT 0;
	v_txpendingmovesetup_ctr	BIGINT DEFAULT 0;

	v_id 				bigint;
	v_displayname 		character varying(100);
	v_fullname 			character varying(100);
	v_gmtoffset 		integer;

	v_connect			TEXT;
	v_sql				TEXT;
	v_msg				TEXT;
	v_flag			TEXT;
BEGIN

	BEGIN
	v_connect := 'hostaddr=' || p_host_ip || ' port=5432 dbname=' || p_dbname || ' user=' || p_user || ' password=' || p_passwd ;
	SELECT dblink_connect('db_connect', v_connect) INTO v_msg;

-- Check that archive date is valid
	IF p_date >= CURRENT_DATE THEN
		RETURN -10;
	END IF;
	
-- NOTE: IF STATEMENT below is ineffective, as a failed dblink_connect will abort function.
	IF v_msg != 'OK' THEN
		v_msg := 'Remote Connect failed. Check connection parameters';
		RAISE NOTICE '%', v_msg;
		RETURN -1;
	END IF;

	v_sql = 'SELECT "ID", 
			"TXDate", 
			"TXOperatorID"
		   FROM "TXMaster"
		  WHERE "TXDate"::date <= ' || quote_literal(p_date) || 
                    'AND "ID" NOT IN 
                       ( SELECT "TXMasterID" 
                           FROM "TXAssetCycle"
                          WHERE "CycleEnd" IS NULL
                             OR "CycleEnd" > '|| quote_literal(p_date) || ') ;' ;

			
	INSERT INTO "TXMaster"
        select * FROM dblink('db_connect', v_sql )
           as t1(id bigint,
                 txdate timestamp without time zone, 
                 txoperatorid bigint
                 ); 

	GET DIAGNOSTICS v_txmaster_ctr = ROW_COUNT;

	v_sql = 'SELECT "TXMasterID", 
			"AssetID", 
			"ParentTx",
			"CycleStart", 
			"CycleEnd", 
			"ResponsibleOrganizationID", 
			"CycleLength"
		  FROM "TXAssetCycle" t
		  JOIN "TXMaster" m ON (m."ID" = t."TXMasterID")
		 WHERE m."TXDate"::date <= ' || quote_literal(p_date) ||
		  'AND t."CycleEnd" IS NOT NULL 
                   AND t."CycleEnd" <= ' || quote_literal(p_date) || ';' ;


	INSERT INTO "TXAssetCycle"
	select * FROM dblink('db_connect', v_sql )
            as t1(txmasterid bigint, 
                  assetid bigint, 
                  parenttx bigint, 
                  cyclestart date,
                  cycleEnd date,
                  responsibleorganizationid bigint,
                  cyclelength bigint
                  ); 

	GET DIAGNOSTICS v_txassetcycle_ctr = ROW_COUNT;
	
	v_sql = 'SELECT "TXMasterID",
		        "AssetID",
		        "DamagedAtLocationID",
		        "Notes",
		        "DamageTypeID"
		   FROM "TXAssetDamaged" t
		   JOIN "TXMaster" m ON (m."ID" = t."TXMasterID")
		  WHERE "TXDate"::date <= ' || quote_literal(p_date) || ';' ;

	INSERT INTO "TXAssetDamaged"
	select * FROM dblink('db_connect', v_sql )
            as t1(txmasterid bigint, 
                  assetid bigint, 
                  damagedatlocationid bigint, 
                  notes text,
                  damagetypeid bigint
                  ); 
	
	GET DIAGNOSTICS v_txassetdamaged_ctr = ROW_COUNT;

	v_sql = 'SELECT "TXMasterID",
		        "AssetID",
		        "OrganizationID",
		        "ProductID",
		        "FillChange",
		        "FillUnitID",
		        "LocationID",
		        "ProductBatchNumber"
		   FROM "TXAssetFilledEmptied" t
		   JOIN "TXMaster" m ON (m."ID" = t."TXMasterID")
		  WHERE "TXDate"::date <= ' || quote_literal(p_date) || ';' ;

	INSERT INTO "TXAssetFilledEmptied"
	select * FROM dblink('db_connect', v_sql )
            as t1(txmasterid bigint, 
                  assetid bigint, 
                  organizationid bigint, 
                  productid bigint,
                  fillchange real,
                  fillunitid bigint,
                  locationid bigint,
                  productbatchnumber character varying(25)
                  ); 

	GET DIAGNOSTICS v_txassetfilledemptied_ctr = ROW_COUNT;

	v_sql = 'SELECT "TXMasterID",
		        "AssetID",
		        "FoundAtLocationID",
		        "Notes",
		        "LostTXID"
	           FROM "TXAssetFound" t
		   JOIN "TXMaster" m ON (m."ID" = t."TXMasterID")
		  WHERE "TXDate"::date <= ' || quote_literal(p_date) || ';' ;

	INSERT INTO "TXAssetFound"
	select * FROM dblink('db_connect', v_sql )
            as t1(txmasterid bigint, 
		  assetid bigint,
		  foundatlocationid bigint,
		  notes text,
		  losttxid bigint
		  );

  	GET DIAGNOSTICS v_txassetfound_ctr = ROW_COUNT;

	v_sql = 'SELECT "TXMasterID",
			"AssetID",
			"LostAtLocationID",
			"Notes"
 		   FROM "TXAssetLost" t
		   JOIN "TXMaster" m ON (m."ID" = t."TXMasterID")
		  WHERE "TXDate"::date <= ' || quote_literal(p_date) || ';' ;

	INSERT INTO "TXAssetLost"
	select * FROM dblink('db_connect', v_sql )
            as t1(txmasterid bigint, 
		  assetid bigint,
		  lostatlocationid bigint,
		  notes text
		  );

  	GET DIAGNOSTICS v_txassetlost_ctr = ROW_COUNT;
  	
	v_sql = 'SELECT "TXMasterID", 
			"AssetID",
			"FromLocationID",
			"ToLocationID",
			"Quantity",
			"BillOfLadingID",
			"ProductID",
			"FillUnitID",
			"CurrentFill",
			"ParentAssetTXID"
		   FROM "TXAssetMoved" t
		   JOIN "TXMaster" m ON (m."ID" = t."TXMasterID")
		  WHERE "TXDate"::date <= ' || quote_literal(p_date) || ';' ;

	INSERT INTO "TXAssetMoved"
	select * FROM dblink('db_connect', v_sql )
            as t1(txmasterid bigint, 
                  assetid bigint, 
		  fromLocationid bigint,
		  tolocationid bigint,
		  quantity integer,
		  billOfladingid bigint,
		  productID bigint,
		  fillunitid bigint,
		  currentfill real,
		  parentassettxid bigint
                  ); 

	GET DIAGNOSTICS v_txassetmoved_ctr = ROW_COUNT;

	v_sql = 'SELECT "TXMasterID",
		        "AssetID",
		        "FromOwnerOrganizationID",
		        "ToOwnerOrganizationID",
		        "FromLesseeOrganizationID",
		        "ToLesseeOrganizationID"
		   FROM "TXAssetOwnerChanged" t
		   JOIN "TXMaster" m ON (m."ID" = t."TXMasterID")
		  WHERE "TXDate"::date <= ' || quote_literal(p_date) || ';' ;

	INSERT INTO "TXAssetOwnerChanged"
	select * FROM dblink('db_connect', v_sql )
            as t1(txmasterid bigint,
                  assetid bigint,
                  fromownerorganizationid bigint,
                  toownerorganizationid bigint,
                  fromlesseeorganizationid bigint,
                  tolesseeorganizationid bigint
                  );
                  
	GET DIAGNOSTICS v_txassetOwnerChanged_ctr = ROW_COUNT;

	v_sql = 'SELECT "TXMasterID",
	                "AssetID",
	                "ProductID",
	                "ValidAssociation",
	                "RequestingIP",
	                "CurrentCount"
		   FROM "TXAssetProductAssociationCheck" t
		   JOIN "TXMaster" m ON (m."ID" = t."TXMasterID")
		  WHERE "TXDate"::date <= ' || quote_literal(p_date) || ';' ;

	INSERT INTO "TXAssetProductAssociationCheck"
	select * FROM dblink('db_connect', v_sql )
            as t1(txmasterid bigint,
                  assetid bigint,
                  productid bigint,
                  validassociation boolean,
                  requestingip character varying(50),
                  currentcount integer
                  );

	GET DIAGNOSTICS v_txassetprodasscheck_ctr = ROW_COUNT;
	
	v_sql = 'SELECT "TXMasterID",
                        "AssetID",
                        "RepairedAtLocationID",
                        "Notes",
                        "MaintComponentID",
                        "TXDamagedID"
	           FROM "TXAssetRepaired" t
		   JOIN "TXMaster" m ON (m."ID" = t."TXMasterID")
		  WHERE "TXDate"::date <= ' || quote_literal(p_date) || ';' ;

	INSERT INTO "TXAssetRepaired"
	select * FROM dblink('db_connect', v_sql )
            as t1(txmasterid bigint,
                  assetid bigint,
                  repairedatlocationid bigint,
                  notes text,
                  maintcomponentid bigint,
                  txdamagedid bigint
                  );

	GET DIAGNOSTICS v_txassetrepaired_ctr = ROW_COUNT;

	v_sql = 'SELECT "TXMasterID",
                        "AssetID",
                        "TagID"
		   FROM "TXAssetTagAssigned" t
		   JOIN "TXMaster" m ON (m."ID" = t."TXMasterID")
		  WHERE "TXDate"::date <= ' || quote_literal(p_date) || ';' ;

	INSERT INTO "TXAssetTagAssigned"
	select * FROM dblink('db_connect', v_sql )
            as t1(txmasterid bigint,
                  assetid bigint,
                  tagid bigint
                  );

	GET DIAGNOSTICS v_txassettagassigned_ctr = ROW_COUNT;

	v_sql = 'SELECT "TXMasterID",
                        "AssetID",
                        "ResponsibleOrganizationID",
                        "ParentTx",
                        "ErpCode"
                   FROM "TXBillingAction" t
                   JOIN "TXMaster" m ON (m."ID" = t."TXMasterID")
		  WHERE "TXDate"::date <= ' || quote_literal(p_date) || ';' ;

	INSERT INTO "TXBillingAction"
	select * FROM dblink('db_connect', v_sql )
            as t1(txmasterid bigint,
                  assetid bigint,
                  responsibleorganizationid bigint,
                  parenttx bigint,
                  erpcode character varying
                  );
	
	GET DIAGNOSTICS v_txbillingaction_ctr = ROW_COUNT;

	v_sql = 'SELECT "TXMasterID",
			"Message"
		   FROM "TXException" t
                   JOIN "TXMaster" m ON (m."ID" = t."TXMasterID")
		  WHERE "TXDate"::date <= ' || quote_literal(p_date) || ';' ;

	INSERT INTO "TXException"
	select * FROM dblink('db_connect', v_sql )
            as t1(txmasterid bigint,
		  message text
		  );

	GET DIAGNOSTICS v_txexception_ctr = ROW_COUNT;

	v_sql = 'SELECT "TXMasterID",
			"OrderDetailID",
			"FilledAtLocationID"
		   FROM "TXOrderDetailFilled" t
                   JOIN "TXMaster" m ON (m."ID" = t."TXMasterID")
		  WHERE "TXDate"::date <= ' || quote_literal(p_date) || ';' ;

	INSERT INTO "TXOrderDetailFilled"
	select * FROM dblink('db_connect', v_sql )
            as t1(txmasterid bigint,
                  orderdetailid bigint,
                  filledatlocationd bigint
                  );

	GET DIAGNOSTICS v_txorderdetailfilled_ctr = ROW_COUNT;
	
	v_sql = 'SELECT "TXMasterID",
	                "AssetID",
	                "TagID"
		   FROM "TxAssetTagRemoved" t
                   JOIN "TXMaster" m ON (m."ID" = t."TXMasterID")
		  WHERE "TXDate"::date <= ' || quote_literal(p_date) || ';' ;

	INSERT INTO "TxAssetTagRemoved"
	select * FROM dblink('db_connect', v_sql )
            as t1(txmasterid bigint,
                  assetid bigint,
                  tagid bigint
                  );

	GET DIAGNOSTICS v_txassettagremoved_ctr = ROW_COUNT;

	v_sql = 'SELECT "TxMasterID",
	                "MoveDocType",
	                "MoveDocID",
	                "MoveCompleted"
		   FROM "TxPendingMoveSetup" t
                   JOIN "TXMaster" m ON (m."ID" = t."TxMasterID")
		  WHERE "TXDate"::date <= ' || quote_literal(p_date) || ';' ;

	INSERT INTO "TxPendingMoveSetup"
	select * FROM dblink('db_connect', v_sql )
            as t1(txmasterid bigint,
                  movedoctype character varying(10),
                  movedocid bigint,
                  movecompleted boolean
                  );

	GET DIAGNOSTICS v_txpendingmovesetup_ctr = ROW_COUNT;

-- Get total tx's inserted

	v_ctr := v_txassetcycle_ctr
	       + v_txassetdamaged_ctr
	       + v_txassetfilledemptied_ctr
	       + v_txassetfound_ctr
	       + v_txassetlost_ctr
	       + v_txassetmoved_ctr
	       + v_txassetOwnerChanged_ctr
	       + v_txassetprodasscheck_ctr
	       + v_txassetrepaired_ctr
	       + v_txassettagassigned_ctr
	       + v_txbillingaction_ctr
	       + v_txexception_ctr
	       + v_txorderdetailfilled_ctr
	       + v_txassettagremoved_ctr
	       + v_txpendingmovesetup_ctr;

-- Check that total tx's inserted = total from master
	IF v_ctr <> v_txmaster_ctr THEN
		v_flag = 'INSERT';
		v_msg := 'ERROR total transactions archived ' 
		         || v_ctr::text 
		         || ' does not equal TXMaster transactions ' 
		         || v_txmaster_ctr::text
		         || ' -> Aborting and rolling back.';
		RAISE EXCEPTION '%', v_msg;
	END IF;	

-- Delete the rows inserted from productions db
-- ON remote db, we need to define a transaction so a ROLLBACK can be done in event of problems
	PERFORM dblink_exec('db_connect', 'BEGIN;');

	v_sql = 'DELETE FROM "TXAssetCycle"
                  WHERE "TXMasterID" IN 
                       (SELECT "ID" FROM "TXMaster"
                         WHERE "TXDate"::date <= ' || quote_literal(p_date) || 
		   'AND "CycleEnd" IS NOT NULL 
                    AND "CycleEnd" <= ' || quote_literal(p_date) || ');' ;

-- Note: As dblink_exec returns a text of # deleted eg: DELETE 134, we need to get count as below
	SELECT dblink_exec('db_connect', v_sql) INTO v_msg;
	v_txassetcycle_ctr := overlay(v_msg placing '' from 1 for 6)::bigint;

	v_sql = 'DELETE FROM "TXAssetDamaged" t
                  WHERE "TXMasterID" IN 
                       (SELECT "ID" FROM "TXMaster"
                         WHERE "TXDate"::date <= ' || quote_literal(p_date) || ');' ;

	SELECT dblink_exec('db_connect', v_sql) INTO v_msg;
	v_txassetdamaged_ctr := overlay(v_msg placing '' from 1 for 6)::bigint;	

	v_sql = 'DELETE FROM "TXAssetFilledEmptied" t
                  WHERE "TXMasterID" IN 
                       (SELECT "ID" FROM "TXMaster"
                         WHERE "TXDate"::date <= ' || quote_literal(p_date) || ');' ;

	SELECT dblink_exec('db_connect', v_sql) INTO v_msg;
	v_txassetfilledemptied_ctr := overlay(v_msg placing '' from 1 for 6)::bigint;	

	v_sql = 'DELETE FROM "TXAssetFound" t
                  WHERE "TXMasterID" IN 
                       (SELECT "ID" FROM "TXMaster"
                         WHERE "TXDate"::date <= ' || quote_literal(p_date) || ');' ;

	SELECT dblink_exec('db_connect', v_sql) INTO v_msg;
	v_txassetfound_ctr := overlay(v_msg placing '' from 1 for 6)::bigint;	

	v_sql = 'DELETE FROM "TXAssetLost" t
                  WHERE "TXMasterID" IN 
                       (SELECT "ID" FROM "TXMaster"
                         WHERE "TXDate"::date <= ' || quote_literal(p_date) || ');' ;

	SELECT dblink_exec('db_connect', v_sql) INTO v_msg;
	v_txassetlost_ctr := overlay(v_msg placing '' from 1 for 6)::bigint;	

	v_sql = 'DELETE FROM "TXAssetMoved" t
                  WHERE "TXMasterID" IN 
                       (SELECT "ID" FROM "TXMaster"
                         WHERE "TXDate"::date <= ' || quote_literal(p_date) || ');' ;

	SELECT dblink_exec('db_connect', v_sql) INTO v_msg;
	v_txassetmoved_ctr := overlay(v_msg placing '' from 1 for 6)::bigint;	

	v_sql = 'DELETE FROM "TXAssetOwnerChanged" t
                  WHERE "TXMasterID" IN 
                       (SELECT "ID" FROM "TXMaster"
                         WHERE "TXDate"::date <= ' || quote_literal(p_date) || ');' ;

	SELECT dblink_exec('db_connect', v_sql) INTO v_msg;
	v_txassetOwnerChanged_ctr := overlay(v_msg placing '' from 1 for 6)::bigint;	

	v_sql = 'DELETE FROM "TXAssetProductAssociationCheck" t
                  WHERE "TXMasterID" IN 
                       (SELECT "ID" FROM "TXMaster"
                         WHERE "TXDate"::date <= ' || quote_literal(p_date) || ');' ;

	SELECT dblink_exec('db_connect', v_sql) INTO v_msg;
	v_txassetprodasscheck_ctr := overlay(v_msg placing '' from 1 for 6)::bigint;	

	v_sql = 'DELETE FROM "TXAssetRepaired" t
                  WHERE "TXMasterID" IN 
                       (SELECT "ID" FROM "TXMaster"
                         WHERE "TXDate"::date <= ' || quote_literal(p_date) || ');' ;

	SELECT dblink_exec('db_connect', v_sql) INTO v_msg;
	v_txassetrepaired_ctr := overlay(v_msg placing '' from 1 for 6)::bigint;	

	v_sql = 'DELETE FROM "TXAssetTagAssigned" t
                  WHERE "TXMasterID" IN 
                       (SELECT "ID" FROM "TXMaster"
                         WHERE "TXDate"::date <= ' || quote_literal(p_date) || ');' ;

	SELECT dblink_exec('db_connect', v_sql) INTO v_msg;
	v_txassettagassigned_ctr := overlay(v_msg placing '' from 1 for 6)::bigint;	

	v_sql = 'DELETE FROM "TXBillingAction" t
                  WHERE "TXMasterID" IN 
                       (SELECT "ID" FROM "TXMaster"
                         WHERE "TXDate"::date <= ' || quote_literal(p_date) || ');' ;

	SELECT dblink_exec('db_connect', v_sql) INTO v_msg;
	v_txbillingaction_ctr := overlay(v_msg placing '' from 1 for 6)::bigint;	

	v_sql = 'DELETE FROM "TXException" t
                  WHERE "TXMasterID" IN 
                       (SELECT "ID" FROM "TXMaster"
                         WHERE "TXDate"::date <= ' || quote_literal(p_date) || ');' ;

	SELECT dblink_exec('db_connect', v_sql) INTO v_msg;
	v_txexception_ctr := overlay(v_msg placing '' from 1 for 6)::bigint;	

	v_sql = 'DELETE FROM "TXOrderDetailFilled" t
                  WHERE "TXMasterID" IN 
                       (SELECT "ID" FROM "TXMaster"
                         WHERE "TXDate"::date <= ' || quote_literal(p_date) || ');' ;

	SELECT dblink_exec('db_connect', v_sql) INTO v_msg;
	v_txorderdetailfilled_ctr := overlay(v_msg placing '' from 1 for 6)::bigint;	

	v_sql = 'DELETE FROM "TxAssetTagRemoved" t
                  WHERE "TXMasterID" IN 
                       (SELECT "ID" FROM "TXMaster"
                         WHERE "TXDate"::date <= ' || quote_literal(p_date) || ');' ;

	SELECT dblink_exec('db_connect', v_sql) INTO v_msg;
	v_txassettagremoved_ctr := overlay(v_msg placing '' from 1 for 6)::bigint;	

	v_sql = 'DELETE FROM "TxPendingMoveSetup" t
                  WHERE "TxMasterID" IN 
                       (SELECT "ID" FROM "TXMaster"
                         WHERE "TXDate"::date <= ' || quote_literal(p_date) || ');' ;

	SELECT dblink_exec('db_connect', v_sql) INTO v_msg;
	v_txpendingmovesetup_ctr := overlay(v_msg placing '' from 1 for 6)::bigint;	

	v_sql = 'DELETE FROM "TXMaster" m
		  WHERE m."TXDate"::date <= ' || quote_literal(p_date) ||
                    'AND "ID" NOT IN 
                       ( SELECT "TXMasterID" 
                           FROM "TXAssetCycle"
                          WHERE "CycleEnd" IS NULL
                             OR "CycleEnd" > ' || quote_literal(p_date) || ') ;' ;

	SELECT dblink_exec('db_connect', v_sql) INTO v_msg;
	v_txmaster_ctr := overlay(v_msg placing '' from 1 for 6)::bigint;	


-- Get total tx's deleted

	v_ctr := v_txassetcycle_ctr
	       + v_txassetdamaged_ctr
	       + v_txassetfilledemptied_ctr
	       + v_txassetfound_ctr
	       + v_txassetlost_ctr
	       + v_txassetmoved_ctr
	       + v_txassetOwnerChanged_ctr
	       + v_txassetprodasscheck_ctr
	       + v_txassetrepaired_ctr
	       + v_txassettagassigned_ctr
	       + v_txbillingaction_ctr
	       + v_txexception_ctr
	       + v_txorderdetailfilled_ctr
	       + v_txassettagremoved_ctr
	       + v_txpendingmovesetup_ctr;

-- Check that total tx's deleted = total from master
	IF v_ctr <> v_txmaster_ctr THEN
		v_flag = 'DELETE';
		v_msg := 'ERROR total transactions deleted ' 
	         || v_ctr::text 
	         || ' does not equal TXMaster transactions ' 
	         || v_txmaster_ctr::text
	         || ' -> Aborting and rolling back.';
		RAISE EXCEPTION '%', v_msg;
	END IF;

--	COMMIT all transactions on remote db
	SELECT dblink_exec('db_connect', 'COMMIT;') INTO v_msg;
	
	PERFORM dblink_disconnect('db_connect');

  RETURN v_txmaster_ctr;

	EXCEPTION 
		WHEN RAISE_EXCEPTION THEN
		IF v_flag = 'INSERT' THEN
			PERFORM dblink_disconnect('db_connect');
			RETURN -100;
		ELSE 
			PERFORM dblink_exec('db_connect', 'ROLLBACK;');
			PERFORM dblink_disconnect('db_connect');
			RETURN -200;
		END IF;
		WHEN connection_exception THEN
		RETURN -1;
	END;

-- SAMPLE FUNCTION CALL
-- SELECT test_archive('10.2.0.36', 'test_archive_test', 'postgres', '<password_for_postgres>', '2008-01-16');

END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER;
ALTER FUNCTION test_archive(text, text, text, text, date) OWNER TO postgres;
GRANT EXECUTE ON FUNCTION test_archive(text, text, text, text, date) TO postgres;
-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux