Clipper On Line • Ver Tópico - Duvidas com Postgresql

Duvidas com Postgresql

Discussão sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

 

Duvidas com Postgresql

Mensagempor andrelucass » 29 Jun 2017 13:24

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
andrelucass
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 65
Data de registro: 25 Fev 2005 10:40
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Duvidas com Postgresql

Mensagempor susviela@bol.com.br » 30 Jun 2017 12:17

Estou recomeçando com harbour e vou acompanhar esse Post.
.
.
"E quando você perder o controle, colherá o que plantou."
=========================================
Carlos Alberto Nunes #Susviela
Site: https://www.PowerInformatica.com.br
=========================================
Blog xBase: https://programandoxbase.wordpress.com/
Blog TI: https://susviela.wordpress.com

( #ProgramandoxBase #AllxBase )
Avatar de usuário

susviela@bol.com.br
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 103
Data de registro: 30 Jun 2017 11:17
Cidade/Estado: São José / SC
Curtiu: 43 vezes
Mens.Curtidas: 12 vezes

Duvidas com Postgresql

Mensagempor Itamar M. Lins Jr. » 30 Jun 2017 13:44

Ola!
Na pasta do harbour 3.4 no diretório contrib\hbpgsql\tests

/*
* 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.
 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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 3361
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 94 vezes
Mens.Curtidas: 151 vezes

Duvidas com Postgresql

Mensagempor sygecom » 03 Jul 2017 13:22

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.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com
Avatar de usuário

sygecom
Membro Master

Membro Master
 
Mensagens: 6547
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 55 vezes

Duvidas com Postgresql

Mensagempor andrelucass » 06 Out 2017 14:06

Boa tarde

Sygecom poderia disponibilizar alguns fontes de exemplo de incluir,alterar,excluir e uma consultar pelo tbrowser?

Atenciosamente
André lucas souza
andrelucass
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 65
Data de registro: 25 Fev 2005 10:40
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Duvidas com Postgresql

Mensagempor pauloa1 » 06 Out 2017 15:38

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
pauloa1
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 171
Data de registro: 25 Jun 2008 14:57
Cidade/Estado: Augusto Pestana-RS
Curtiu: 1 vez
Mens.Curtidas: 4 vezes

Duvidas com Postgresql

Mensagempor sygecom » 07 Out 2017 18:37

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.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com
Avatar de usuário

sygecom
Membro Master

Membro Master
 
Mensagens: 6547
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 55 vezes

Duvidas com Postgresql

Mensagempor pauloa1 » 09 Out 2017 08:56

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
pauloa1
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 171
Data de registro: 25 Jun 2008 14:57
Cidade/Estado: Augusto Pestana-RS
Curtiu: 1 vez
Mens.Curtidas: 4 vezes

Duvidas com Postgresql

Mensagempor sygecom » 09 Out 2017 13:03

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
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com
Avatar de usuário

sygecom
Membro Master

Membro Master
 
Mensagens: 6547
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 55 vezes

Duvidas com Postgresql

Mensagempor pauloa1 » 09 Out 2017 15:26

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
pauloa1
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 171
Data de registro: 25 Jun 2008 14:57
Cidade/Estado: Augusto Pestana-RS
Curtiu: 1 vez
Mens.Curtidas: 4 vezes

Duvidas com Postgresql

Mensagempor sygecom » 09 Out 2017 19:32

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.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com
Avatar de usuário

sygecom
Membro Master

Membro Master
 
Mensagens: 6547
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 55 vezes




Retornar para Banco de Dados

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


Faça uma doação para o forum
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro