Página 1 de 1
Duvidas com Postgresql
Enviado: 29 Jun 2017 13:24
por andrelucass
Ola a todos
Estou migrando meu banco de dados de .dbf para postgresql, gostaria de saber se alguem usa o postgresql usando pgsql do Rodrigo Morine
Atenciosamente
Andre lucas Souza
emal:
andrelucassouza72@gmail.com
Duvidas com Postgresql
Enviado: 30 Jun 2017 12:17
por susviela@bol.com.br
Estou recomeçando com harbour e vou acompanhar esse Post.
Duvidas com Postgresql
Enviado: 30 Jun 2017 13:44
por Itamar M. Lins Jr.
Ola!
Na pasta do harbour 3.4 no diretório contrib\hbpgsql\tests
Código: Selecionar todos
/*
* Converts a .dbf file into a Postgres table
*
* Copyright 2000 Maurilio Longo <maurilio.longo@libero.it>
* (The original file was ported from mysql and changed by Rodrigo Moreno rodrigo_moreno@yahoo.com)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software; see the file COPYING.txt. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site https://www.gnu.org/).
*
* As a special exception, the Harbour Project gives permission for
* additional uses of the text contained in its release of Harbour.
*
* The exception is that, if you link the Harbour libraries with other
* files to produce an executable, this does not by itself cause the
* resulting executable to be covered by the GNU General Public License.
* Your use of that executable is in no way restricted on account of
* linking the Harbour library code into it.
*
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*
* This exception applies only to the code released by the Harbour
* Project under the name Harbour. If you copy code from other
* Harbour Project or Free Software Foundation releases into a copy of
* Harbour, as the General Public License permits, the exception does
* not apply to the code that you add in this way. To avoid misleading
* anyone as to the status of such modified files, you must delete
* this exception notice from them.
*
* If you write modifications of your own for Harbour, it is your choice
* whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice.
*
*/
#require "hbpgsql"
#include "fileio.ch"
#include "inkey.ch"
#include "hbextcdp.ch"
PROCEDURE Main()
LOCAL cHostName
LOCAL cUser
LOCAL cPassword
LOCAL cDatabase := "postgres", cTable, cFile
LOCAL i
LOCAL lCreateTable := .F.
LOCAL oServer, oTable, oRecord
LOCAL cField
LOCAL cTypeDB
LOCAL cTypePG
LOCAL cValue
LOCAL nCommit := 100
LOCAL hFile
LOCAL nCount := 0
LOCAL nRecno := 0
LOCAL lTruncate := .F.
LOCAL lUseTrans := .F.
LOCAL cPath := "public"
Set( _SET_DATEFORMAT, "yyyy-mm-dd" )
Set( _SET_DELETED, .T. )
/* Scan parameters and setup workings */
FOR i := 1 TO PCount()
SWITCH hb_PValue( i )
CASE "-h" ; cHostName := hb_PValue( ++i ) ; EXIT
CASE "-d" ; cDatabase := hb_PValue( ++i ) ; EXIT
CASE "-t" ; cTable := AllTrim( hb_PValue( ++i ) ) ; EXIT
CASE "-f" ; cFile := hb_PValue( ++i ) ; EXIT
CASE "-u" ; cUser := hb_PValue( ++i ) ; EXIT
CASE "-p" ; cPassword := hb_PValue( ++i ) ; EXIT
CASE "-c" ; lCreateTable := .T. ; EXIT
CASE "-x" ; lTruncate := .T. ; EXIT
CASE "-s" ; lUseTrans := .T. ; EXIT
CASE "-m" ; nCommit := Val( hb_PValue( ++i ) ) ; EXIT
CASE "-r" ; nRecno := Val( hb_PValue( ++i ) ) ; EXIT
CASE "-e" ; cPath := hb_PValue( ++i ) ; EXIT
CASE "-cp" ; Set( _SET_DBCODEPAGE, hb_PValue( ++i ) ) ; EXIT
OTHERWISE
help()
RETURN
ENDSWITCH
NEXT
IF Empty( cTable ) .OR. cFile == ""
help()
RETURN
ENDIF
// create log file
IF ( hFile := hb_vfOpen( cTable + ".log", FO_CREAT + FO_TRUNC + FO_WRITE ) ) == NIL
? "Cannot create log file"
RETURN
ENDIF
USE ( cFile ) SHARED READONLY
oServer := TPQServer():New( cHostName, cDatabase, cUser, cPassword, , cPath )
IF oServer:NetErr()
? oServer:ErrorMsg()
RETURN
ENDIF
oServer:lallCols := .F.
IF lCreateTable
IF oServer:TableExists( cTable )
oServer:DeleteTable( cTable )
IF oServer:NetErr()
? oServer:ErrorMsg()
hb_vfWrite( hFile, "Error: " + oServer:ErrorMsg() + hb_eol() )
hb_vfClose( hFile )
RETURN
ENDIF
ENDIF
oServer:CreateTable( cTable, dbStruct() )
IF oServer:NetErr()
? oServer:ErrorMsg()
hb_vfWrite( hFile, "Error: " + oServer:ErrorMsg() + hb_eol() )
hb_vfClose( hFile )
RETURN
ENDIF
ENDIF
IF lTruncate
oServer:Execute( "truncate table " + cTable )
IF oServer:NetErr()
? oServer:ErrorMsg()
hb_vfWrite( hFile, "Error: " + oServer:ErrorMsg() + hb_eol() )
hb_vfClose( hFile )
RETURN
ENDIF
ENDIF
oTable := oServer:Query( "SELECT * FROM " + cTable + " LIMIT 1" )
IF oTable:NetErr()
? oTable:ErrorMsg()
hb_vfWrite( hFile, "Error: " + oTable:ErrorMsg() + hb_eol() )
hb_vfClose( hFile )
RETURN
ENDIF
IF lUseTrans
oServer:StartTransaction()
ENDIF
hb_vfWrite( hFile, "Start: " + Time() + hb_eol() )
? "Start:", Time()
?
IF nRecno != 0
dbGoto( nRecno )
ENDIF
DO WHILE ! Eof() .AND. hb_keyStd( Inkey() ) != K_ESC .AND. ( nRecno == 0 .OR. nRecno == RecNo() )
oRecord := oTable:GetBlankRow()
FOR i := 1 TO oTable:FCount()
cField := Lower( oTable:FieldName( i ) )
cTypeDB := Left( hb_FieldType( FieldPos( cField ) ), 1 )
cTypePG := oRecord:FieldType( i )
cValue := FieldGet( FieldPos( cField ) )
IF cValue != NIL
IF cTypePG != cTypeDB
DO CASE
CASE cTypePG == "C" .AND. cTypeDB $ "NIYF8BZ24" ; cValue := hb_ntos( cValue )
CASE cTypePG == "C" .AND. cTypeDB == "D" ; cValue := DToC( cValue )
CASE cTypePG == "C" .AND. cTypeDB $ "T@" ; cValue := hb_TToC( cValue )
CASE cTypePG == "C" .AND. cTypeDB == "L" ; cValue := iif( cValue, "S", "N" )
CASE cTypePG == "N" .AND. cTypeDB $ "CQ" ; cValue := Val( cValue )
CASE cTypePG == "N" .AND. cTypeDB == "D" ; cValue := Val( DToS( cValue ) )
CASE cTypePG == "N" .AND. cTypeDB == "L" ; cValue := iif( cValue, 1, 0 )
CASE cTypePG == "D" .AND. cTypeDB $ "CQ" ; cValue := CToD( cValue )
CASE cTypePG == "D" .AND. cTypeDB $ "NIYF8BZ24" ; cValue := hb_SToD( hb_ntos( cValue ) )
CASE cTypePG == "L" .AND. cTypeDB $ "NIYF8BZ24" ; cValue := ! Empty( cValue )
CASE cTypePG == "L" .AND. cTypeDB $ "CQ" ; cValue := AllTrim( cValue ) $ "YySs1"
ENDCASE
ENDIF
IF cValue != NIL
IF oRecord:FieldType( i ) == "C" .OR. oRecord:FieldType( i ) == "M"
oRecord:FieldPut( i, hb_StrToUTF8( cValue ) )
ELSE
oRecord:FieldPut( i, cValue )
ENDIF
ENDIF
ENDIF
NEXT
oTable:Append( oRecord )
IF oTable:NetErr()
?
? "Error Record:", RecNo(), Left( oTable:ErrorMsg(), 70 )
?
hb_vfWrite( hFile, "Error at record: " + hb_ntos( RecNo() ) + " Description: " + oTable:ErrorMsg() + hb_eol() )
ELSE
nCount++
ENDIF
dbSkip()
IF nCount % nCommit == 0
DevPos( Row(), 1 )
DevOut( "imported recs:", hb_ntos( nCount ) )
IF lUseTrans
oServer:commit()
oServer:StartTransaction()
ENDIF
ENDIF
ENDDO
IF nCount % nCommit != 0 .AND. lUseTrans
oServer:commit()
ENDIF
hb_vfWrite( hFile, "End: " + Time() + ", records in dbf: " + hb_ntos( RecNo() ) + ", imported recs: " + hb_ntos( nCount ) + hb_eol() )
? "End:", Time()
hb_vfClose( hFile )
dbCloseAll()
oTable:Destroy()
oServer:Destroy()
RETURN
STATIC PROCEDURE Help()
? "dbf2pg - dbf file to PostgreSQL table conversion utility"
? "-h hostname"
? "-u user"
? "-p password"
? "-d name of database to use (default: postgres)"
? "-t name of table to add records to (required)"
? "-c delete existing table and create a new one"
? "-f name of .dbf file to import (required)"
? "-x truncate table before append records"
? "-s use transaction"
? "-m commit interval"
? "-r insert only record number"
? "-e search path"
?
RETURN
Tem outros exemplos.
Código: Selecionar todos
Pasta de C:\Users\Itamar\Documents\GitHub\harbour-core\contrib\hbpgsql\tests
07/02/17 12:52 <DIR> .
07/02/17 12:52 <DIR> ..
06/09/15 22:06 1.870 async.prg
07/02/17 12:52 10.346 cache.prg
25/01/17 10:53 8.909 dbf2pg.prg
27/11/13 13:36 25 hbmk.hbm
12/09/16 14:25 2.286 ping.prg
21/05/14 23:48 3.715 simple.prg
30/05/14 23:43 2.985 stress.prg
08/07/14 13:04 3.017 test.prg
8 arquivo(s) 33.153 bytes
Lembrando que não uso nem testei essa parte hbpgsql, mas eu acompanho e sei que tem pessoas que usa com sucesso.
E tem também o SQLMIX que acessa o PG.
Saudações,
Itamar M. Lins Jr.
Duvidas com Postgresql
Enviado: 03 Jul 2017 13:22
por sygecom
andrelucass escreveu:Ola a todos
Estou migrando meu banco de dados de .dbf para postgresql, gostaria de saber se alguem usa o postgresql usando pgsql do Rodrigo Morine
Atenciosamente
Andre lucas Souza
Andre,
Eu ainda uso muito o SQLRDD do xHarbour, mas quero fugir dele e, por isso estamos migrando tudo para a classe do Rodrigo, já tenho boa parte do sistema rodando com a classe,mas ainda tenho muito o que migrar, principalmente módulos grandes que usam sintaxe xbase.
Duvidas com Postgresql
Enviado: 06 Out 2017 14:06
por andrelucass
Boa tarde
Sygecom poderia disponibilizar alguns fontes de exemplo de incluir,alterar,excluir e uma consultar pelo tbrowser?
Atenciosamente
André lucas souza
Duvidas com Postgresql
Enviado: 06 Out 2017 15:38
por pauloa1
Olá Leonardo!
Qual o caminho das pedras sobre pgsql do Rodrigo Morine ?
Também uso sqlrdd, estou satisfeito, mas como o xHB parou...
Ele é semelhante ao sqlrdd ? em termos de códigos e velocidades de acesso etc.. ?
Paulo
Duvidas com Postgresql
Enviado: 07 Out 2017 18:37
por sygecom
Olá Paulo,
pauloa1 escreveu:
Qual o caminho das pedras sobre pgsql do Rodrigo Morine ?
Você consegue pegar na contrib do xharbour, \xharbour\contrib\pgsql
Ele é semelhante ao sqlrdd ? em termos de códigos e velocidades de acesso etc.. ?
Não é semelhante, tem que usar tudo comando SQL, quanto a velocidades é superior sim, o SQLRDD abre duas conexão para cada conexão isso as vez torna complicado.
Duvidas com Postgresql
Enviado: 09 Out 2017 08:56
por pauloa1
Blz! Vou dar uma olhada.
O acesso é nativo como no sqlrdd ?
Pode usar misto, ou seja com os dois no mesmo sistema, para ir substituindo aos poucos?
Paulo
Duvidas com Postgresql
Enviado: 09 Out 2017 13:03
por sygecom
pauloa1 escreveu:O acesso é nativo como no sqlrdd ?
Sim,tendo as dll dentro da pasta a conexão é naativa, não precisa de OBDC configurado
Pode usar misto, ou seja com os dois no mesmo sistema, para ir substituindo aos poucos?
Sim,tenho usado os dois ao mesmo tempo, estou migrando aos poucos para ficar tudo comando SQL
Duvidas com Postgresql
Enviado: 09 Out 2017 15:26
por pauloa1
Que blz! Eu já tenho praticamente todos os comandos em sql, não uso mais USe, replace etc...
mas uso algumas funções como:
SR_ChangeStruct() para alterar campos.
sr_begintransaction(), sr_committransaction(),sr_rollbacktransaction(), SR_EndTransaction(), para Transações.
Você conseguiu substituir essas funções ?
O resultado de uma consulta sql, vc tem a opção de escolher se quer em array ou normal tabela->campo, como no sqlrdd?
Paulo
Duvidas com Postgresql
Enviado: 09 Out 2017 19:32
por sygecom
Blz Paulo,
pauloa1 escreveu:
Que blz! Eu já tenho praticamente todos os comandos em sql, não uso mais USe, replace etc...
Então vai ser mamão com açúcar...
mas uso algumas funções como:
SR_ChangeStruct() para alterar campos.
sr_begintransaction(), sr_committransaction(),sr_rollbacktransaction(), SR_EndTransaction(), para Transações.
Você conseguiu substituir essas funções ?
Tudo já tem metod pronto:
METHOD StartTransaction()
METHOD TransactionStatus() INLINE PQtransactionstatus( ::pDb )
METHOD Commit()
METHOD Rollback()
Sobre o SR_ChangeStruct(), você vai ter que fazer uma function para substituir usando as duas abaixo e mais um ALTER TABLE, mas nada que uns dois dias de trampo bem concentrado já resolve.
METHOD TableStruct( cTable )
METHOD CreateTable( cTable, aStruct )
O resultado de uma consulta sql, vc tem a opção de escolher se quer em array ou normal tabela->campo, como no sqlrdd?
Ele retorna tudo em ARRAY e, bem rápido.