Seite 1 von 1

PostgreSQL "function" vorhanden ? [erledigt]

Verfasst: Di, 14. Aug 2012 6:10
von AUGE_OHR
hi,

ich erstelle pgDBE 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