{"id":43361,"date":"2026-03-06T14:34:57","date_gmt":"2026-03-06T13:34:57","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=43361"},"modified":"2026-03-06T14:35:00","modified_gmt":"2026-03-06T13:35:00","slug":"reading-data-from-postgresql-into-oracle","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/reading-data-from-postgresql-into-oracle\/","title":{"rendered":"Reading data from PostgreSQL into Oracle"},"content":{"rendered":"\n<p>Usually the requests we get are around getting data from Oracle into PostgreSQL, but sometimes also the opposite is true and so it happened recently. Depending on the requirements, usually real time vs. delayed\/one-shot, there are several options when you want to read from Oracle into PostgreSQL. One common of way of doing this is to use the <a href=\"https:\/\/www.dbi-services.com\/blog\/connecting-your-postgresql-instance-to-an-oracle-database\/\" target=\"_blank\" rel=\"noreferrer noopener\">foreign data wrapper for Oracle<\/a> (the post is quite old but still valid) or to use some kind of logical replication when data needs to be up to date. The question is what options do you have for the other way around? When it comes to logical replication there are several tools out there which might work for your needs but what options do you have that compare more to the Oracle foreign data wrapper when data does not need to be up to date?<\/p>\n\n\n\n<p>Quite old, but still available and usable is <a href=\"https:\/\/en.wikipedia.org\/wiki\/Open_Database_Connectivity\" target=\"_blank\" rel=\"noreferrer noopener\">ODBC<\/a> and if you combine this with <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/26\/heter\/heterogeneous-services-agent-types.html#GUID-07CFE202-2439-4867-93B2-52955BABBEF7\" target=\"_blank\" rel=\"noreferrer noopener\">Oracle&#8217;s Database Heterogeneous Connectivity<\/a> this gives you one option for reading from data PostgreSQL into Oracle. Initially I wanted to write that down in document for the customer, but as we like to share here, it turned out to be become a blog post available to everybody.<\/p>\n\n\n\n<p>My target Oracle system is an <a href=\"https:\/\/www.oracle.com\/database\/technologies\/appdev\/xe.html\" target=\"_blank\" rel=\"noreferrer noopener\">Oracle Database 21c Express Edition Release 21.0.0.0.0<\/a> running on Oracle <a href=\"https:\/\/www.oracle.com\/linux\/\" target=\"_blank\" rel=\"noreferrer noopener\">Linux 8.10<\/a>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,21,33,34]; title: ; notranslate\" title=\"\">\n&#x5B;oracle@ora ~]$ cat \/etc\/os-release\nNAME=&quot;Oracle Linux Server&quot;\nVERSION=&quot;8.10&quot;\nID=&quot;ol&quot;\nID_LIKE=&quot;fedora&quot;\nVARIANT=&quot;Server&quot;\nVARIANT_ID=&quot;server&quot;\nVERSION_ID=&quot;8.10&quot;\nPLATFORM_ID=&quot;platform:el8&quot;\nPRETTY_NAME=&quot;Oracle Linux Server 8.10&quot;\nANSI_COLOR=&quot;0;31&quot;\nCPE_NAME=&quot;cpe:\/o:oracle:linux:8:10:server&quot;\nHOME_URL=&quot;https:\/\/linux.oracle.com\/&quot;\nBUG_REPORT_URL=&quot;https:\/\/github.com\/oracle\/oracle-linux&quot;\n\nORACLE_BUGZILLA_PRODUCT=&quot;Oracle Linux 8&quot;\nORACLE_BUGZILLA_PRODUCT_VERSION=8.10\nORACLE_SUPPORT_PRODUCT=&quot;Oracle Linux&quot;\nORACLE_SUPPORT_PRODUCT_VERSION=8.10\n\n&#x5B;oracle@ora ~]$ sqlplus \/ as sysdba\n\nSQL*Plus: Release 21.0.0.0.0 - Production on Fri Mar 6 04:14:38 2026\nVersion 21.3.0.0.0\n\nCopyright (c) 1982, 2021, Oracle.  All rights reserved.\n\n\nConnected to:\nOracle Database 21c Express Edition Release 21.0.0.0.0 - Production\nVersion 21.3.0.0.0\n\nSQL&gt; set lines 300\nSQL&gt; select banner from v$version;\n\nBANNER\n--------------------------------------------------------------------------------\nOracle Database 21c Express Edition Release 21.0.0.0.0 - Production\n\nSQL&gt; \n<\/pre><\/div>\n\n\n<p>My source system is a PostgreSQL 17.5 running on <a href=\"https:\/\/get.opensuse.org\/leap\/16.0\/?type=server\" target=\"_blank\" rel=\"noreferrer noopener\">openSUSE Leap 16<\/a>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,15,30,36,42,48]; title: ; notranslate\" title=\"\">\npostgres@:\/home\/postgres\/ &#x5B;175] cat \/etc\/os-release\nNAME=&quot;openSUSE Leap&quot;\nVERSION=&quot;16.0&quot;\nID=&quot;opensuse-leap&quot;\nID_LIKE=&quot;suse opensuse&quot;\nVERSION_ID=&quot;16.0&quot;\nPRETTY_NAME=&quot;openSUSE Leap 16.0&quot;\nANSI_COLOR=&quot;0;32&quot;\nCPE_NAME=&quot;cpe:\/o:opensuse:leap:16.0&quot;\nBUG_REPORT_URL=&quot;https:\/\/bugs.opensuse.org&quot;\nHOME_URL=&quot;https:\/\/www.opensuse.org\/&quot;\nDOCUMENTATION_URL=&quot;https:\/\/en.opensuse.org\/Portal:Leap&quot;\nLOGO=&quot;distributor-logo-Leap&quot;\n\npostgres@:\/home\/postgres\/ &#x5B;175] ip a\n1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000\n    link\/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\n    inet 127.0.0.1\/8 scope host lo\n       valid_lft forever preferred_lft forever\n    inet6 ::1\/128 scope host noprefixroute\n       valid_lft forever preferred_lft forever\n2: enp1s0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000\n    link\/ether 52:54:00:01:dd:de brd ff:ff:ff:ff:ff:ff\n    altname enx52540001ddde\n    inet 192.168.122.158\/24 brd 192.168.122.255 scope global dynamic noprefixroute enp1s0\n       valid_lft 3480sec preferred_lft 3480sec\n    inet6 fe80::b119:5142:93ab:b6aa\/64 scope link noprefixroute\n       valid_lft forever preferred_lft forever\n\npostgres@:\/home\/postgres\/ &#x5B;175] psql -c &quot;select version()&quot;\n                                      version\n------------------------------------------------------------------------------------\n PostgreSQL 17.5 dbi services build on x86_64-linux, compiled by gcc-15.0.1, 64-bit\n(1 row)\n\npostgres@:\/home\/postgres\/ &#x5B;175] psql -c &quot;show port&quot;\n port\n------\n 5433\n(1 row)\n\npostgres@:\/home\/postgres\/ &#x5B;175] psql -c &quot;show listen_addresses&quot;\n listen_addresses\n------------------\n *\n(1 row)\n\npostgres@:\/home\/postgres\/ &#x5B;175] cat $PGDATA\/pg_hba.conf | grep &quot;192.168.122&quot;\nhost    all             all             192.168.122.0\/24        trust\n<\/pre><\/div>\n\n\n<p>So far for the baseline.<\/p>\n\n\n\n<p>Obviously. the first step is to have a ODBC connection working from the Oracle host to the PostgreSQL host, without involving the Oracle database. For this we need <a href=\"https:\/\/www.unixodbc.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">unixODBC<\/a> and on top of that we need the <a href=\"https:\/\/odbc.postgresql.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">ODBC driver for PostgreSQL<\/a>. Both are available as packages on Oracle Linux 8 (should be true for any distribution based on Red Hat), so that is easy to get installed:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n&#x5B;oracle@ora ~]$ sudo dnf install -y unixODBC postgresql-odbc\nLast metadata expiration check: 0:09:06 ago on Fri 06 Mar 2026 01:38:40 AM EST.\nDependencies resolved.\n=============================================================================================\n Package                        Architecture    Version             Repository          Size\n=============================================================================================\nInstalling:\n postgresql-odbc                x86_64          10.03.0000-3.el8_6  ol8_appstream      430 k\n unixODBC                       x86_64          2.3.7-2.el8_10      ol8_appstream      453 k\nInstalling dependencies:\n libpq                          x86_64          13.23-1.el8_10      ol8_appstream      199 k\n libtool-ltdl                   x86_64          2.4.6-25.el8        ol8_baseos_latest   58 k\n\nTransaction Summary\n=============================================================================================\nInstall  4 Packages\n\nTotal download size: 1.1 M\nInstalled size: 3.4 M\nDownloading Packages:\n(1\/4): libtool-ltdl-2.4.6-25.el8.x86_64.rpm                778 kB\/s |  58 kB     00:00\n(2\/4): libpq-13.23-1.el8_10.x86_64.rpm                     2.2 MB\/s | 199 kB     00:00\n(3\/4): postgresql-odbc-10.03.0000-3.el8_6.x86_64.rpm       4.4 MB\/s | 430 kB     00:00\n(4\/4): unixODBC-2.3.7-2.el8_10.x86_64.rpm                  14 MB\/s  | 453 kB     00:00\n---------------------------------------------------------------------------------------\nTotal                                                      9.9 MB\/s | 1.1 MB     00:00\nRunning transaction check\nTransaction check succeeded.\nRunning transaction test\nTransaction test succeeded.\nRunning transaction\n  Preparing        :                                                 1\/1\n  Installing       : libpq-13.23-1.el8_10.x86_64                     1\/4\n  Installing       : libtool-ltdl-2.4.6-25.el8.x86_64                2\/4\n  Running scriptlet: libtool-ltdl-2.4.6-25.el8.x86_64                2\/4\n  Installing       : unixODBC-2.3.7-2.el8_10.x86_64                  3\/4\n  Running scriptlet: unixODBC-2.3.7-2.el8_10.x86_64                  3\/4\n  Installing       : postgresql-odbc-10.03.0000-3.el8_6.x86_64       4\/4\n  Running scriptlet: postgresql-odbc-10.03.0000-3.el8_6.x86_64       4\/4\n  Verifying        : libtool-ltdl-2.4.6-25.el8.x86_64                1\/4\n  Verifying        : libpq-13.23-1.el8_10.x86_64                     2\/4\n  Verifying        : postgresql-odbc-10.03.0000-3.el8_6.x86_64       3\/4\n  Verifying        : unixODBC-2.3.7-2.el8_10.x86_64                  4\/4\n\nInstalled:\n  libpq-13.23-1.el8_10.x86_64 libtool-ltdl-2.4.6-25.el8.x86_64 postgresql-odbc-10.03.0000-3.el8_6.x86_64 unixODBC-2.3.7-2.el8_10.x86_64\n\nComplete!\n<\/pre><\/div>\n\n\n<p>Having that in place, lets check which configuration we need to touch:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,11]; title: ; notranslate\" title=\"\">\n&#x5B;oracle@ora ~]$ odbcinst -j\nunixODBC 2.3.7\nDRIVERS............: \/etc\/odbcinst.ini\nSYSTEM DATA SOURCES: \/etc\/odbc.ini\nFILE DATA SOURCES..: \/etc\/ODBCDataSources\nUSER DATA SOURCES..: \/home\/oracle\/.odbc.ini\nSQLULEN Size.......: 8\nSQLLEN Size........: 8\nSQLSETPOSIROW Size.: 8\n\n&#x5B;oracle@ora ~]$ odbc_config --odbcini --odbcinstini\n\/etc\/odbc.ini\n\/etc\/odbcinst.ini\n<\/pre><\/div>\n\n\n<p>odbcinst.ini is used to configure one or more ODBC drivers, <a href=\"https:\/\/www.unixodbc.org\/odbcinst.html\" target=\"_blank\" rel=\"noreferrer noopener\">odbc.ini<\/a> is used to configure the data sources. There are several examples in  the driver configuration file, but we&#8217;re only interested in PostgreSQL:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n&#x5B;oracle@ora ~]$ grep pgodbc -A 6 \/etc\/odbcinst.ini \n&#x5B;pgodbc]\nDescription     = ODBC for PostgreSQL\nDriver          = \/usr\/lib\/psqlodbcw.so\nSetup           = \/usr\/lib\/libodbcpsqlS.so\nDriver64        = \/usr\/lib64\/psqlodbcw.so\nSetup64         = \/usr\/lib64\/libodbcpsqlS.so\nFileUsage       = 1\n<\/pre><\/div>\n\n\n<p>For the data source get the IP address\/hostname, port, user and password for your PostgreSQL database and adapt the configuration below:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n&#x5B;oracle@ora ~]$ cat \/etc\/odbc.ini \n&#x5B;pgdsn]\nDriver = pgodbc\nDescription = PostgreSQL ODBC Driver\nDatabase = postgres\nServername = 192.168.122.158\nUsername = postgres\nPassword = postgres\nPort = 5433\nUseDeclareFetch = 1\nCommLog = \/tmp\/pgodbclink.log\nDebug = 1\nLowerCaseIdentifier = 1\n<\/pre><\/div>\n\n\n<p>If you got it all right, you should be able to establish a connection to PostgreSQL using the &#8220;<a href=\"https:\/\/www.unixodbc.org\/doc\/UserManual\/\" target=\"_blank\" rel=\"noreferrer noopener\">isql<\/a>&#8221; utility:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,11,21]; title: ; notranslate\" title=\"\">\n&#x5B;oracle@ora ~]$ isql -v pgdsn\n+---------------------------------------+\n| Connected!                            |\n|                                       |\n| sql-statement                         |\n| help &#x5B;tablename]                      |\n| quit                                  |\n|                                       |\n+---------------------------------------+\n\nSQL&gt; select datname from pg_database;\n+----------------------------------------------------------------+\n| datname                                                        |\n+----------------------------------------------------------------+\n| postgres                                                       |\n| template1                                                      |\n| template0                                                      |\n+----------------------------------------------------------------+\nSQLRowCount returns -1\n3 rows fetched\nSQL&gt; quit;\n&#x5B;oracle@ora ~]$\n<\/pre><\/div>\n\n\n<p>This proves, that connectivity from the Oracle host to the PostgreSQL database is fine and ODBC is working properly.<\/p>\n\n\n\n<p>Now we need to tell the Oracle Listener and the Oracle database how to use this configuration. This requires a configuration for the listener and a configuration for the heterogeneous services. For configuring the listener we need to know which configuration file the listener is using, but this is easy to find out:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n&#x5B;oracle@ora ~]$ lsnrctl status | grep &quot;Listener Parameter File&quot;\nListener Parameter File   \/opt\/oracle\/homes\/OraDBHome21cXE\/network\/admin\/listener.ora\n<\/pre><\/div>\n\n\n<p>The content that needs to go into this file is:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; highlight: [7,8,9,10,11,12]; title: ; notranslate\" title=\"\">\nSID_LIST_LISTENER =\n  (SID_LIST =\n    (SID_DESC =\n    (SID_NAME = orcl)\n    (ORACLE_HOME = \/opt\/oracle\/product\/21c\/dbhomeXE\/)\n    )\n   (SID_DESC=\n    (SID_NAME = pgdsn)\n    (ORACLE_HOME = \/opt\/oracle\/product\/21c\/dbhomeXE\/)\n    (ENVS=&quot;LD_LIBRARY_PATH=\/usr\/local\/lib:\/usr\/lib64:\/opt\/oracle\/product\/21c\/dbhomeXE\/lib\/)\n    (PROGRAM=dg4odbc)\n   )\n)\n<\/pre><\/div>\n\n\n<p>LD_LIBRARY_PATH must include the PATH to the ODBC driver, and &#8220;PROGRAM&#8221; must be &#8220;dg4odbc&#8221;.<\/p>\n\n\n\n<p>Continue by adding the configuration for the heterogeneous services, which in my case goes here:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n&#x5B;oracle@ora ~]$ cat \/opt\/oracle\/homes\/OraDBHome21cXE\/hs\/admin\/initpgdsn.ora \nHS_FDS_CONNECT_INFO = pgdsn\nHS_FDS_TRACE_LEVEL = DEBUG\nHS_FDS_TRACE_FILE_NAME = \/tmp\/hs.trc\nHS_FDS_SHAREABLE_NAME = \/usr\/lib64\/libodbc.so\nHS_LANGUAGE=AMERICAN_AMERICA.WE8ISO8859P15\nset ODBCINI=\/etc\/odbc.ini\n<\/pre><\/div>\n\n\n<p>Create the connection definition in tnsnames.ora:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,13,14,15,16,17,18]; title: ; notranslate\" title=\"\">\n&#x5B;oracle@ora ~]$ cat \/opt\/oracle\/homes\/OraDBHome21cXE\/network\/admin\/tnsnames.ora\n# tnsnames.ora Network Configuration File: \/opt\/oracle\/homes\/OraDBHome21cXE\/network\/admin\/tnsnames.ora\n# Generated by Oracle configuration tools.\n\nXE =\n  (DESCRIPTION =\n    (ADDRESS = (PROTOCOL = TCP)(HOST = ora.it.dbi-services.com)(PORT = 1521))\n    (CONNECT_DATA =\n      (SERVER = DEDICATED)\n      (SERVICE_NAME = XE)\n    )\n  )\n\npgdsn =\n   (DESCRIPTION=\n   (ADDRESS=(PROTOCOL=tcp)(HOST = ora.it.dbi-services.com)(PORT = 1521))\n     (CONNECT_DATA=(SID=pgdsn))\n     (HS=OK)\n)\n<\/pre><\/div>\n\n\n<p>Restart the listener and make sure that the service &#8220;pgdsn&#8221; shows up:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,9]; title: ; notranslate\" title=\"\">\n&#x5B;oracle@ora ~]$ lsnrctl stop\n\nLSNRCTL for Linux: Version 21.0.0.0.0 - Production on 06-MAR-2026 08:22:52\n\nCopyright (c) 1991, 2021, Oracle.  All rights reserved.\n\nConnecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ora.it.dbi-services.com)(PORT=1521)))\nThe command completed successfully\n&#x5B;oracle@ora ~]$ lsnrctl start\n\nLSNRCTL for Linux: Version 21.0.0.0.0 - Production on 06-MAR-2026 08:22:53\n\nCopyright (c) 1991, 2021, Oracle.  All rights reserved.\n\nStarting \/opt\/oracle\/product\/21c\/dbhomeXE\/\/bin\/tnslsnr: please wait...\n\nTNSLSNR for Linux: Version 21.0.0.0.0 - Production\nSystem parameter file is \/opt\/oracle\/homes\/OraDBHome21cXE\/network\/admin\/listener.ora\nLog messages written to \/opt\/oracle\/diag\/tnslsnr\/ora\/listener\/alert\/log.xml\nListening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ora.it.dbi-services.com)(PORT=1521)))\nListening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))\n\nConnecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ora.it.dbi-services.com)(PORT=1521)))\nSTATUS of the LISTENER\n------------------------\nAlias                     LISTENER\nVersion                   TNSLSNR for Linux: Version 21.0.0.0.0 - Production\nStart Date                06-MAR-2026 08:22:53\nUptime                    0 days 0 hr. 0 min. 0 sec\nTrace Level               off\nSecurity                  ON: Local OS Authentication\nSNMP                      OFF\nDefault Service           XE\nListener Parameter File   \/opt\/oracle\/homes\/OraDBHome21cXE\/network\/admin\/listener.ora\nListener Log File         \/opt\/oracle\/diag\/tnslsnr\/ora\/listener\/alert\/log.xml\nListening Endpoints Summary...\n  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ora.it.dbi-services.com)(PORT=1521)))\n  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))\nServices Summary...\nService &quot;orcl&quot; has 1 instance(s).\n  Instance &quot;orcl&quot;, status UNKNOWN, has 1 handler(s) for this service...\nService &quot;pgdsn&quot; has 1 instance(s).\n  Instance &quot;pgdsn&quot;, status UNKNOWN, has 1 handler(s) for this service...\nThe command completed successfully\n\n<\/pre><\/div>\n\n\n<p>Finally, create a database link in Oracle and verify that you can ask for data from PostgreSQL:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,12,16]; title: ; notranslate\" title=\"\">\n&#x5B;oracle@ora ~]$ sqlplus \/ as sysdba\n\nSQL*Plus: Release 21.0.0.0.0 - Production on Fri Mar 6 08:27:23 2026\nVersion 21.3.0.0.0\n\nCopyright (c) 1982, 2021, Oracle.  All rights reserved.\n\nConnected to:\nOracle Database 21c Express Edition Release 21.0.0.0.0 - Production\nVersion 21.3.0.0.0\n\nSQL&gt; create database link pglink connect to &quot;postgres&quot; identified by &quot;postgres&quot; using &#039;pgdsn&#039;;\n\nDatabase link created.\n\nSQL&gt; select &quot;datname&quot; from &quot;pg_database&quot;@pglink;\n\ndatname\n--------------------------------------------------------------------------------\npostgres\ntemplate1\ntemplate0\n\nSQL&gt; \n<\/pre><\/div>\n\n\n<p>That&#8217;s it.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Usually the requests we get are around getting data from Oracle into PostgreSQL, but sometimes also the opposite is true and so it happened recently. Depending on the requirements, usually real time vs. delayed\/one-shot, there are several options when you want to read from Oracle into PostgreSQL. One common of way of doing this is [&hellip;]<\/p>\n","protected":false},"author":29,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[229,198],"tags":[96,77],"type_dbi":[],"class_list":["post-43361","post","type-post","status-publish","format-standard","hentry","category-database-administration-monitoring","category-database-management","tag-oracle","tag-postgresql"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Reading data from PostgreSQL into Oracle - dbi Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/reading-data-from-postgresql-into-oracle\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Reading data from PostgreSQL into Oracle\" \/>\n<meta property=\"og:description\" content=\"Usually the requests we get are around getting data from Oracle into PostgreSQL, but sometimes also the opposite is true and so it happened recently. Depending on the requirements, usually real time vs. delayed\/one-shot, there are several options when you want to read from Oracle into PostgreSQL. One common of way of doing this is [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/reading-data-from-postgresql-into-oracle\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-06T13:34:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-06T13:35:00+00:00\" \/>\n<meta name=\"author\" content=\"Daniel Westermann\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@westermanndanie\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daniel Westermann\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/reading-data-from-postgresql-into-oracle\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/reading-data-from-postgresql-into-oracle\/\"},\"author\":{\"name\":\"Daniel Westermann\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"headline\":\"Reading data from PostgreSQL into Oracle\",\"datePublished\":\"2026-03-06T13:34:57+00:00\",\"dateModified\":\"2026-03-06T13:35:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/reading-data-from-postgresql-into-oracle\/\"},\"wordCount\":553,\"commentCount\":0,\"keywords\":[\"Oracle\",\"PostgreSQL\"],\"articleSection\":[\"Database Administration &amp; Monitoring\",\"Database management\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/reading-data-from-postgresql-into-oracle\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/reading-data-from-postgresql-into-oracle\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/reading-data-from-postgresql-into-oracle\/\",\"name\":\"Reading data from PostgreSQL into Oracle - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2026-03-06T13:34:57+00:00\",\"dateModified\":\"2026-03-06T13:35:00+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/reading-data-from-postgresql-into-oracle\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/reading-data-from-postgresql-into-oracle\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/reading-data-from-postgresql-into-oracle\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Reading data from PostgreSQL into Oracle\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\",\"name\":\"Daniel Westermann\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"caption\":\"Daniel Westermann\"},\"description\":\"Daniel Westermann is Principal Consultant and Technology Leader Open Infrastructure at dbi services. He has more than 15 years of experience in management, engineering and optimization of databases and infrastructures, especially on Oracle and PostgreSQL. Since the beginning of his career, he has specialized in Oracle Technologies and is Oracle Certified Professional 12c and Oracle Certified Expert RAC\/GridInfra. Over time, Daniel has become increasingly interested in open source technologies, becoming \u201cTechnology Leader Open Infrastructure\u201d and PostgreSQL expert. \u00a0Based on community or EnterpriseDB tools, he develops and installs complex high available solutions with PostgreSQL. He is also a certified PostgreSQL Plus 9.0 Professional and a Postgres Advanced Server 9.4 Professional. He is a regular speaker at PostgreSQL conferences in Switzerland and Europe. Today Daniel is also supporting our customers on AWS services such as AWS RDS, database migrations into the cloud, EC2 and automated infrastructure management with AWS SSM (System Manager). He is a certified AWS Solutions Architect Professional. Prior to dbi services, Daniel was Management System Engineer at LC SYSTEMS-Engineering AG in Basel. Before that, he worked as Oracle Developper &amp;\u00a0Project Manager at Delta Energy Solutions AG in Basel (today Powel AG). Daniel holds a diploma in Business Informatics (DHBW, Germany). His branch-related experience mainly covers the pharma industry, the financial sector, energy, lottery and telecommunications.\",\"sameAs\":[\"https:\/\/x.com\/westermanndanie\"],\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/daniel-westermann\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Reading data from PostgreSQL into Oracle - dbi Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/reading-data-from-postgresql-into-oracle\/","og_locale":"en_US","og_type":"article","og_title":"Reading data from PostgreSQL into Oracle","og_description":"Usually the requests we get are around getting data from Oracle into PostgreSQL, but sometimes also the opposite is true and so it happened recently. Depending on the requirements, usually real time vs. delayed\/one-shot, there are several options when you want to read from Oracle into PostgreSQL. One common of way of doing this is [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/reading-data-from-postgresql-into-oracle\/","og_site_name":"dbi Blog","article_published_time":"2026-03-06T13:34:57+00:00","article_modified_time":"2026-03-06T13:35:00+00:00","author":"Daniel Westermann","twitter_card":"summary_large_image","twitter_creator":"@westermanndanie","twitter_misc":{"Written by":"Daniel Westermann","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/reading-data-from-postgresql-into-oracle\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/reading-data-from-postgresql-into-oracle\/"},"author":{"name":"Daniel Westermann","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"headline":"Reading data from PostgreSQL into Oracle","datePublished":"2026-03-06T13:34:57+00:00","dateModified":"2026-03-06T13:35:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/reading-data-from-postgresql-into-oracle\/"},"wordCount":553,"commentCount":0,"keywords":["Oracle","PostgreSQL"],"articleSection":["Database Administration &amp; Monitoring","Database management"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/reading-data-from-postgresql-into-oracle\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/reading-data-from-postgresql-into-oracle\/","url":"https:\/\/www.dbi-services.com\/blog\/reading-data-from-postgresql-into-oracle\/","name":"Reading data from PostgreSQL into Oracle - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2026-03-06T13:34:57+00:00","dateModified":"2026-03-06T13:35:00+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/reading-data-from-postgresql-into-oracle\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/reading-data-from-postgresql-into-oracle\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/reading-data-from-postgresql-into-oracle\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Reading data from PostgreSQL into Oracle"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66","name":"Daniel Westermann","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","caption":"Daniel Westermann"},"description":"Daniel Westermann is Principal Consultant and Technology Leader Open Infrastructure at dbi services. He has more than 15 years of experience in management, engineering and optimization of databases and infrastructures, especially on Oracle and PostgreSQL. Since the beginning of his career, he has specialized in Oracle Technologies and is Oracle Certified Professional 12c and Oracle Certified Expert RAC\/GridInfra. Over time, Daniel has become increasingly interested in open source technologies, becoming \u201cTechnology Leader Open Infrastructure\u201d and PostgreSQL expert. \u00a0Based on community or EnterpriseDB tools, he develops and installs complex high available solutions with PostgreSQL. He is also a certified PostgreSQL Plus 9.0 Professional and a Postgres Advanced Server 9.4 Professional. He is a regular speaker at PostgreSQL conferences in Switzerland and Europe. Today Daniel is also supporting our customers on AWS services such as AWS RDS, database migrations into the cloud, EC2 and automated infrastructure management with AWS SSM (System Manager). He is a certified AWS Solutions Architect Professional. Prior to dbi services, Daniel was Management System Engineer at LC SYSTEMS-Engineering AG in Basel. Before that, he worked as Oracle Developper &amp;\u00a0Project Manager at Delta Energy Solutions AG in Basel (today Powel AG). Daniel holds a diploma in Business Informatics (DHBW, Germany). His branch-related experience mainly covers the pharma industry, the financial sector, energy, lottery and telecommunications.","sameAs":["https:\/\/x.com\/westermanndanie"],"url":"https:\/\/www.dbi-services.com\/blog\/author\/daniel-westermann\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/43361","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=43361"}],"version-history":[{"count":12,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/43361\/revisions"}],"predecessor-version":[{"id":43373,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/43361\/revisions\/43373"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=43361"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=43361"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=43361"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=43361"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}