Seite 1 von 1
PostgreSQL "function" vorhanden ? [erledigt]
Verfasst: Di, 14. Aug 2012 6:10
von AUGE_OHR
hi,
ich erstelle pg
DBE gerecht beim Import auch die "Trigger". Diese verwendet eine "function"
Code: Alles auswählen
cQuery := "CREATE TRIGGER " + xtab + "_isam_rowversion AFTER UPDATE ON " + ;
xtab + " FOR EACH ROW EXECUTE PROCEDURE isam_rowversion_update()"
auf einem PostgreSQL Server der nicht per DbfUpsize.EXE "behandelt" wurde existiert aber keine solche "function".
Frage : wie kann ich "feststellen", vor dem "CREATE" ob eine "function" auf dem Server existiert ?
Re: PostgreSQL "function" vorhanden ?
Verfasst: Di, 14. Aug 2012 8:24
von brandelh
so wie du in den Systemtabellen nach indexen forschen kannst, müsste es auch eine Tabelle mit hinterlegten Funktionen geben.
Re: PostgreSQL "function" vorhanden ?
Verfasst: Di, 14. Aug 2012 8:27
von AUGE_OHR
brandelh hat geschrieben:so wie du in den Systemtabellen nach indexen forschen kannst, müsste es auch eine Tabelle mit hinterlegten Funktionen geben.
"
Systemtabellen" ... das ist das Stichwort, Danke .
Re: PostgreSQL "function" vorhanden ?
Verfasst: Mo, 01. Okt 2012 22:55
von AUGE_OHR
hi,
DbfUpSize.EXE legt im System Catalog Trigger "function" an. so kann ich abfragen ob die vorhanden sind und ggf. erstellen.
Code: Alles auswählen
METHOD PGUDialog:Check_ISAM_Trigger()
LOCAL n
LOCAL aTrigger := {}
LOCAL aPGDBE := {}
LOCAL nPosi
LOCAL cItem
LOCAL nRows
AADD(aPGDBE,"isam_rowversion_update") // by DbfUpSize.EXE
AADD(aPGDBE,"isam_tablemeta_update") // by DbfUpSize.EXE
::cQuery := "SELECT * FROM pg_proc WHERE proname LIKE 'isam%'"
IF ::oPG:Exec( ::cQuery )
::oR_Fields := ::oPG:result
nRows := ::oR_Fields:rows
IF nRows > 0
::OutMsg( STR( nRows ) + " Trigger: " )
FOR n := 1 TO nRows
cItem := ::oR_Fields:GetValue( n - 1, 0 )
::OutMsg( cItem )
AADD(aTrigger, cItem )
NEXT
::OutMsg( CRLF, .F. )
n := 1
FOR n := 1 TO LEN(aPGDBE)
cItem := aPGDBE[n]
nPosi := ASCAN(aTrigger,{|x| x = cItem })
IF nPosi > 0
// found, do nothing
ELSE
DO CASE
CASE n = 1 ; ::Create_ISAM_Rowversion()
CASE n = 2 ; ::Create_ISAM_Tablemeta()
ENDCASE
ENDIF
NEXT
ELSE
::Create_ISAM_Rowversion()
::Create_ISAM_Tablemeta()
ENDIF
ENDIF
RETURN