NAMEDATABASE = test
USERDATABASE = postgres

FILEBACKUP = BackUp.sql
FILEPATCHED = BackUpPatched.sql

FIRSTFINDSTRING = "CREATE TYPE mchar (\n"
SECONDFINDSTRING = "CREATE TYPE mvarchar (\n"
ENDFINDSTRING = ");\n"
LASTFINDSTRING = "REVOKE ALL ON SCHEMA public FROM PUBLIC;\n"

BEFOREFIRSTNEWSTRING = CREATE FUNCTION mchartypmod_in(cstring[])\n    RETURNS int4\n    AS '\'\\\$$libdir/mchar\''\n    LANGUAGE C IMMUTABLE RETURNS NULL ON NULL INPUT;\n\nCREATE FUNCTION mchartypmod_out(int4)\n    RETURNS cstring\n    AS '\'\\\$$libdir/mchar\''\n    LANGUAGE C IMMUTABLE RETURNS NULL ON NULL INPUT;\n\n

FIRSTNEWSTRING = CREATE TYPE mchar (\n    INTERNALLENGTH = -1,\n    INPUT = mchar_in,\n    OUTPUT = mchar_out,\n    TYPMOD_IN       = mchartypmod_in,\n    TYPMOD_OUT      = mchartypmod_out,\n    RECEIVE	= mchar_recv,\n    SEND = mchar_send,\n    STORAGE = extended\n);\n\n
SECONDNEWSTRING = CREATE TYPE mvarchar (\n    INTERNALLENGTH = -1,\n    INPUT = mvarchar_in,\n    OUTPUT = mvarchar_out,\n    TYPMOD_IN       = mchartypmod_in,\n    TYPMOD_OUT      = mchartypmod_out,\n    RECEIVE	= mvarchar_recv,\n    SEND = mvarchar_send,\n    STORAGE = extended\n);\n\n

LASTSTRING = CREATE OPERATOR CLASS mchar_case_ops\nFOR TYPE mchar USING btree AS\n        OPERATOR        1       &<  ,\n               OPERATOR        2       &<= ,\n               OPERATOR        3       &=  ,\n               OPERATOR        4       &>= ,\n               OPERATOR        5       &>  ,\n               FUNCTION        1       mchar_case_cmp(mchar, mchar),\n        OPERATOR        1       &<  (mchar, mvarchar),\n               OPERATOR        2       &<= (mchar, mvarchar),\n               OPERATOR        3       &=  (mchar, mvarchar),\n               OPERATOR        4       &>= (mchar, mvarchar),\n               OPERATOR        5       &>  (mchar, mvarchar),\n               FUNCTION        1       mc_mv_case_cmp(mchar, mvarchar);\n\n CREATE OPERATOR CLASS mvarchar_case_ops\nFOR TYPE mvarchar USING btree AS\n        OPERATOR        1       &<  ,\n               OPERATOR        2       &<= ,\n               OPERATOR        3       &=  ,\n               OPERATOR        4       &>= ,\n               OPERATOR        5       &>  ,\n               FUNCTION        1       mvarchar_case_cmp(mvarchar, mvarchar),\n        OPERATOR        1       &<  (mvarchar, mchar),\n               OPERATOR        2       &<= (mvarchar, mchar),\n               OPERATOR        3       &=  (mvarchar, mchar),\n               OPERATOR        4       &>= (mvarchar, mchar),\n               OPERATOR        5       &>  (mvarchar, mchar),\n               FUNCTION        1       mv_mc_case_cmp(mvarchar, mchar);\n\n



all: createbackup pachfile
createbackup: 
	echo "create back up"
	$(shell pg_dump $(NAMEDATABASE) > $(FILEBACKUP) -U $(USERDATABASE) ) 
pachfile:
	echo "path backup"
	perl -e  'open(FILEIN, "$(FILEBACKUP)"); open(FILEOUT, ">$(FILEPATCHED)"); $$fNotWrite = 0 ;  while (<FILEIN>) { $$ThisString = $$_ ; if ($$ThisString eq ($(FIRSTFINDSTRING))){$$fNotWrite=1; print FILEOUT "$(BEFOREFIRSTNEWSTRING)"; print FILEOUT "$(FIRSTNEWSTRING)"; } if ($$ThisString eq ($(SECONDFINDSTRING))){$$fNotWrite=1; print FILEOUT "$(SECONDNEWSTRING)";} if ($$ThisString eq ($(LASTFINDSTRING))){print FILEOUT "$(LASTSTRING)";} if($$fNotWrite == 0) {print FILEOUT $$ThisString} else {if ($$ThisString eq ($(ENDFINDSTRING))){$$fNotWrite = 0;} } }  close(FILEIN); close(FILEOUT); exit;' 