esto lo utilizo mucho cuando inicia-lizo una BD, de pruebas a producción.
aquí esta el código.
SET SAFETY OFF
RELEASE ALL
CLEAR ALL
lcserver="localhost"
lcdatabase="database"
lcuser="usuario"
lcpassword="password"
lcport="5432"
lcstringConn="Provider=MSDASQL;Driver={PostgreSQL ODBC Driver(UNICODE)}; Server="+lcserver+";Port="+lcport+";Database="+lcdatabase+";uid="+lcuser+";pwd="+lcpassword+";UseServerSidePrepare=1;MaxVarcharSize=254;UnknownsAsLongVarchar=0;TextAsLongVarchar=0;"
SQLSETPROP(0, "Displogin", 3)
_nconn=SQLSTRINGCONNECT(lcstringConn)
IF _nconn>0 THEN
TEXT TO lcSQLcommand NOSHOW TEXTMERGE
SELECT UPPER(tablename) AS tabla
FROM pg_tables
WHERE schemaname='mapasoft'
ORDER BY tablename;
ENDTEXT
IF SQLEXEC(_nconn, lcSQLcommand, "inicializa")>0 THEN
SELECT inicializa
GO TOP
IF ! EOF() THEN
nvan=1
nson=RECCOUNT()
DO WHILE ! EOF()
SET MESSAGE TO '...Alterando Sequencia Tabla : '+ALLTRIM(STR(nvan))+' De '+ALLTRIM(STR(nson))+' ('+ALLTRIM(inicializa.tabla)+')'
corderby=ALLTRIM(inicializa.tabla)+'.id'+ALLTRIM(inicializa.tabla)
TEXT TO lcSQLcommand NOSHOW TEXTMERGE
SELECT * FROM mapasoft.<<inicializa.tabla>> ORDER BY <<corderby>> DESC;
ENDTEXT
IF SQLEXEC(_nconn, lcSQLcommand, "cuantoshay")>0 THEN
nhayy=1
SELECT cuantoshay
GO TOP
IF ! EOF() THEN
nhayy=&x+1
ENDIF
cseq='mapasoft.'+ALLTRIM(inicializa.tabla)+'_id'+ALLTRIM(inicializa.tabla)+'_seq'
TEXT TO lcSQLcommand NOSHOW TEXTMERGE
ALTER SEQUENCE <<cseq>> RESTART;
ENDTEXT
IF SQLEXEC(_nconn, lcSQLcommand, "")>0 THEN
TEXT TO lcSQLcommand NOSHOW TEXTMERGE
ALTER SEQUENCE <<cseq>> START WITH <<nhayy>>;
ENDTEXT
IF SQLEXEC(_nconn, lcSQLcommand, "")>0 THEN
TEXT TO lcSQLcommand NOSHOW TEXTMERGE
VACUUM ANALYZE VERBOSE mapasoft.<<inicializa.tabla>>;
ENDTEXT
IF SQLEXEC(_nconn, lcSQLcommand, "")>0 THEN
TEXT TO lcSQLcommand NOSHOW TEXTMERGE
REINDEX TABLE mapasoft.<<inicializa.tabla>>;
ENDTEXT
IF SQLEXEC(_nconn, lcSQLcommand, "")>0 THEN
nvan=nvan+1
ELSE
=AERROR(laError)
cError=laError(1,3)
MESSAGEBOX(cError)
EXIT
ENDIF
ELSE
=AERROR(laError)
cError=laError(1,3)
MESSAGEBOX(cError)
EXIT
ENDIF
ELSE
=AERROR(laError)
cError=laError(1,3)
MESSAGEBOX(cError)
EXIT
ENDIF
ELSE
=AERROR(laError)
cError=laError(1,3)
MESSAGEBOX(cError)
EXIT
ENDIF
ELSE
=AERROR(laError)
cError=laError(1,3)
MESSAGEBOX(cError)
EXIT
ENDIF
SET MESSAGE TO ''
SELECT inicializa
SKIP
ENDDO
MESSAGEBOX('Listo.')
ELSE
MESSAGEBOX('Error; No Se Localizo Ninguna Tabla En La Base De Datos.', 16, 'Mensaje.')
ENDIF
ELSE
=AERROR(laError)
cError=laError(1,3)
MESSAGEBOX(cError)
ENDIF
ELSE
=AERROR(laError)
cError=laError(1,3)
MESSAGEBOX(cError)
ENDIF
SET MESSAGE TO ''
SET SAFETY ON
RELEASE ALL
CLEAR ALL
CLEAR MEMORY
RELEASE _nconn
salds....