Para todos los casos
sid de postgres es postg
1)primero configurar el odbcinst.ini para que vea el driver de postgres
[PostgreSQL]
Description = ODBC for PostgreSQL
Driver = /usr/lib/libodbcpsql.so
Setup = /usr/lib/libodbcpsqlS.so
FileUsage = 1
2)configurar el ODBC.ini con la bd que tiene que leer , el nombre del servicio tiene que ir entre corchetes
[postg]
Driver = /usr/lib/libodbcpsql.so
Trace = No
TraceFile =
Database = pruebaBD
Servername = 192.168.63.6 //tu ip
UserName = usertest // usuario
Password = passtes //pass
Port = 5432
Protocol = 7.0
ReadOnly = No
RowVersioning = No
ShowSystemTables = No
ShowOidColumn = No
FakeOidIndex = No
3)probar con el comando isql –v nombre driver;
en este caso isql –v postg
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
Para que se conecte con oracle:
1 – hay que ir al directorio /u01/app/oracle/product/10.2.0/db_1/hs/admin
crear un archivo que se llame INIT(sid).ora
por ejemplo initpostg.ora y que tenga esto
HS_FDS_CONNECT_INFO = postg
HS_FDS_TRACE_LEVEL = 0
HS_FDS_TRACE_FILE_NAME = postg.trc
HS_AUTOREGISTER = TRUE
HS_FDS_SHAREABLE_NAME = /usr/lib/libodbcpsql.so
set ODBCINI=/etc/odbc.ini
set client_encoding=latin1
2 - agregar al listener.ora
(SID_DESC =
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(SID_NAME =postg)
(PROGRAM = hsodbc)
)
y al tnsnames.ora
postg=
( DESCRIPTION=
(ADDRESS = (PROTOCOL = TCP)(HOST=localhost)(PORT=1521))
(CONNECT_DATA =
(SID = postg)
)
(HS=OK) //esto es porque es un servicio heterogeneo
)
después se crea un dblink pero tener en cuenta que el usuario debe ir entre comillas dobles y con minusculas
CREATE PUBLIC DATABASE LINK base
CONNECT TO "oracle" IDENTIFIED BY "pass" USING 'postg';
Con este script de oracle podras crear las tablas en postgres ,una vez ejecutada esta consulta te devolvera todas las sentencias necesarias , solo tendras que copiar y pegas y tendras tus tablas en postgres , es simple despues voy a poner para pasar los indices.
select case
when instr(LEAD (datos, 1, 0) OVER (ORDER BY nro),'create table') > 0
then substr(datos,1,length(datos) -1) || ');'
when LEAD (datos, 1, 0) OVER (ORDER BY nro) = '0'
then substr(datos,1,length(datos) -1) || ');'
else
datos
end
from (
select nro, case when table_name <> LAG (table_name, 1, 0) OVER (ORDER BY nro)
then 'create table ' || table_name || '('
else
null
end || ' ' ||
columna datos
from (
SELECT rownum nro,
uc.table_name,
column_name
|| ' '
|| DECODE (uc.data_type, 'NUMBER', 'NUMERIC', 'VARCHAR2', 'CHAR','CLOB','text',uc.data_type)
|| ' '
|| decode(uc.data_type,'VARCHAR2','('||uc.data_length||')', null)
|| ',' columna,
LEAD (uc.table_name, 1, 0) OVER (ORDER BY uc.table_name) AS prox
FROM user_tables ut, user_tab_cols uc
WHERE ut.table_name = uc.table_name))