
{"id":6320,"date":"2024-11-13T13:29:23","date_gmt":"2024-11-13T13:29:23","guid":{"rendered":"https:\/\/test.opensource-db.in\/wp1\/?p=6320"},"modified":"2025-02-06T12:04:26","modified_gmt":"2025-02-06T12:04:26","slug":"an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg","status":"publish","type":"post","link":"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/","title":{"rendered":"An Introduction to migrating from Oracle to PostgreSQL using ora2pg"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introduction:<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s my first attempt at blogging about my favourite database PostgreSQL: The World&#8217;s Most Advanced Open Source Relational Database. With it\u2019s robust features, open-source nature, and growing ecosystem, migrating to PostgreSQL opens up exciting new possibilities for your database environment. Migrating a database from one system to another can be complex, especially when dealing with large and complex databases. However, with the right tools and techniques, this process can be streamlined significantly. In this blog post, we will explore the migration of an Oracle database to a PostgreSQL database using the <code>ora2pg<\/code> tool, with a specific focus on running Oracle within a Docker container.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Assumptions:<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">a) <strong>Oracle Database:<\/strong> Running in a Docker container-<strong>Oracle <\/strong>21c.<br>b) <strong>PostgreSQL: <\/strong>Running on a Docker container with version 16<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Preparedness of the system:<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Make sure your docker containers for Oracle and Postgres are up and running<\/li>\n\n\n\n<li>As <code>ora2pg<\/code> is written in Perl language, we need to install Perl-core on the Oracle container using the below command.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>bash-4.2# yum install perl-core<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Download <\/strong><code>ora2pg-24.3V<\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Here are the links to download ora2pg.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&gt;&gt; Click On this link <a href=\"https:\/\/ora2pg.darold.net\/documentation.html\">https:\/\/ora2pg.darold.net\/documentation.html<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&gt;&gt; Click on Download =&gt;<a href=\"https:\/\/github.com\/darold\/ora2pg\/archive\/refs\/tags\/v24.3.tar.gz\">Source code(tar.gz)<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Copy the <code>ora2pg<\/code> to the Oracle database and unzip the tar file.<br>NB: Following are executed on a power shell prompt<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>C:\\Users\\lokes&gt;cd .\\Downloads\\\nPS C:\\Users\\lokes\\Downloads&gt;docker cp ora2pg-24.3.tar.gz oracle-db:\/home\/downloads\nSuccessfully copied 579kB to oracle-db:\/home\/downloads<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Let\u2019s connect docker bash(bash-4.2) using the below command.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>C:\\Users\\lokes&gt;docker exec -u 0 -it oracle-db bash\nbash-4.2# cd downloads\/\nbash-4.2# ls\nora2pg-24.3.tar.gz\nbash-4.2#  unzip ora2pg-24.3.tar.gz\nbash-4.2# ls -lrt\ntotal 568\ndrwxrwxr-x 6 root root   4096 Mar 28  2024 ora2pg-24.3\n-rwxr-xr-x 1 root root 576965 Nov  7 09:59 ora2pg-24.3.tar.gz<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Installation of <code>ora2pg<\/code><\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Check the <code>Makefile.PL<\/code> file in the <code>ora2pg<\/code> directory and run the following<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bash-4.2# cd ora2pg-24.3\nbash-4.2# ls -lrt\ntotal 668\ndrwxrwxr-x 2 root root   4096 Mar 28  2024 scripts\ndrwxrwxr-x 5 root root   4096 Mar 28  2024 packaging\ndrwxrwxr-x 3 root root   4096 Mar 28  2024 lib\ndrwxrwxr-x 2 root root   4096 Mar 28  2024 doc\n-rw-rw-r-- 1 root root 374342 Mar 28  2024 changelog\n-rw-rw-r-- 1 root root 171271 Mar 28  2024 README\n-rw-rw-r-- 1 root root  75191 Mar 28  2024 Makefile.PL\n-rw-rw-r-- 1 root root    180 Mar 28  2024 MANIFEST\n-rw-rw-r-- 1 root root  32472 Mar 28  2024 LICENSE\n-rw-rw-r-- 1 root root     21 Mar 28  2024 INSTALL\n\nbash-4.2# perl Makefile.PL\nbash-4.2# ls -lrt\ntotal 784\ndrwxrwxr-x 5 root root   4096 Mar 28  2024 packaging\ndrwxrwxr-x 3 root root   4096 Mar 28  2024 lib\ndrwxrwxr-x 2 root root   4096 Mar 28  2024 doc\n-rw-rw-r-- 1 root root 374342 Mar 28  2024 changelog\n-rw-rw-r-- 1 root root 171271 Mar 28  2024 README\n-rw-rw-r-- 1 root root  75191 Mar 28  2024 Makefile.PL\n-rw-rw-r-- 1 root root    180 Mar 28  2024 MANIFEST\n-rw-rw-r-- 1 root root  32472 Mar 28  2024 LICENSE\n-rw-rw-r-- 1 root root     21 Mar 28  2024 INSTALL\n-rw-r--r-- 1 root root  70666 Nov  7 10:10 ora2pg.conf.dist\ndrwxrwxr-x 2 root root   4096 Nov  7 10:10 scripts\n-rw-r--r-- 1 root root  28787 Nov  7 10:10 Makefile\n-rw-r--r-- 1 root root    545 Nov  7 10:10 MYMETA.yml\n-rw-r--r-- 1 root root    956 Nov  7 10:10 MYMETA.json\ndrwxr-xr-x 8 root root   4096 Nov  7 10:10 blib\n-rw-r--r-- 1 root root      0 Nov  7 10:10 pm_to_blib<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Create the <code>ora2pg.conf<\/code> file using <code>ora2pg.conf.dist<\/code> as reference.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bash-4.2# cp ora2pg.conf.dist ora2pg.conf\nbash-4.2# ls -lrt\ntotal 856\ndrwxrwxr-x 5 root root   4096 Mar 28  2024 packaging\ndrwxrwxr-x 3 root root   4096 Mar 28  2024 lib\ndrwxrwxr-x 2 root root   4096 Mar 28  2024 doc\n-rw-rw-r-- 1 root root 374342 Mar 28  2024 changelog\n-rw-rw-r-- 1 root root 171271 Mar 28  2024 README\n-rw-rw-r-- 1 root root  75191 Mar 28  2024 Makefile.PL\n-rw-rw-r-- 1 root root    180 Mar 28  2024 MANIFEST\n-rw-rw-r-- 1 root root  32472 Mar 28  2024 LICENSE\n-rw-rw-r-- 1 root root     21 Mar 28  2024 INSTALL\n-rw-r--r-- 1 root root  70666 Nov  7 10:10 ora2pg.conf.dist\ndrwxrwxr-x 2 root root   4096 Nov  7 10:10 scripts\n-rw-r--r-- 1 root root  28787 Nov  7 10:10 Makefile\n-rw-r--r-- 1 root root    545 Nov  7 10:10 MYMETA.yml\n-rw-r--r-- 1 root root    956 Nov  7 10:10 MYMETA.json\ndrwxr-xr-x 8 root root   4096 Nov  7 10:10 blib\n-rw-r--r-- 1 root root      0 Nov  7 10:10 pm_to_blib<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Configuration setting in <code>ora2pg.conf<\/code> file<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>ORACLE_HOME     \/opt\/oracle\/product\/21c\/dbhome_1\nORACLE_DSN      dbi:Oracle:host=172.17.0.2;sid=MYCDB;port=1521\nORACLE_USER     sys\nORACLE_PWD      oracle123\nPG_VERSION     \t16\nUSER_GRANTS     1\nEXPORT_SCHEMA   1\nTRANSACTION   \tREADONLY\nSCHEMA   \tABC\nTYPE         \tTABLE <\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Set the environment variables if they are not as per below.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bash-4.2# echo $LD_LIBRARY_PATH\n\/opt\/oracle\/product\/21c\/dbhome_1\/lib:\/usr\/lib\nbash-4.2# echo $ORACLE_HOME\n\/opt\/oracle\/product\/21c\/dbhome_1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Install the <code>DBD::Oracle<\/code> library for the Oracle database<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bash-4.2# yum install gcc\nbash-4.2# yum install libaio-devel\nbash-4.2# perl -MCPAN -e 'install DBD::Oracle'<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Check the version of <code>ora2pg<\/code><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>bash-4.2# ora2pg -t SHOW_VERSION -c ora2pg.conf\nOracle Database 21c Enterprise Edition Release 21.0.0.0.0\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Now, Ora2Pg connection is successful to the Oracle server.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Export the schemas from the Oracle server using the below command<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ora2pg  -c \/home\/downloads\/ora2pg-24.3\/ora2pg.conf -d -o TABLE_persons.sql\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use the following switches for debugging the command:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> -c | --conf file: Set an alternate configuration file other than the\n                        default \/etc\/ora2pg\/ora2pg.conf.\n -d | --debug: Enable verbose output.\n -o | --out file: Set the path to the output file where SQL will\n                        be written. Default: output.sql in running directory.<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Importing to PostgreSQL server.<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Open the Windows command line and copy the file to the local<br>NB: Following are executed on a power shell prompt<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>C:\\Users\\lokes\\Downloads&gt; docker cp oracle-db:\/home\/downloads\/ora2pg-24.3\/output\/TABLE_persons.sql .\nSuccessfully copied 2.56kB to C:\\Users\\lokes\\Downloads\\.<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>C:\\Users\\lokes\\Downloads&gt; dir TABLE*.sql\n    Directory: C:\\Users\\lokes\\Downloads\nMode          LastWriteTime         Length Name\n----          -------------         ------ ----\n-a----        13-11-2024 11:58      494    TABLE_persons.sql<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>PS C:\\Users\\lokes\\Downloads&gt; docker cp .\\TABLE_persons.sql postgres:\/home\/data\nSuccessfully copied 2.56kB to postgres:\/home\/data<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Login to the Postgres server using the below command and create&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PS C:\\Users\\lokes&gt; docker exec -it postgres psql -U postgres -d postgres -h 127.0.0.1 -p 5432\npostgres=# Create role abc login createdb nosuperuser password 'postgres';<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>LOGIN:<\/strong> Grants the ability to log into the database server.<\/li>\n\n\n\n<li><strong>CREATE DB:<\/strong> Grants the ability to create new databases.<\/li>\n\n\n\n<li><strong>PASSWORD:<\/strong> Sets the password for the role to &#8216;postgres&#8217;.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Open docker in the Postgres terminal and import the schema using&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># cd data\n# ls -lrt\ntotal 4\n-rwxr-xr-x 1 root root 506 Nov 11 06:35 TABLE_persons.sql\n# psql --version\npsql (PostgreSQL) 16.4 (Debian 16.4-1.pgdg120+2)\n\n# psql -f TABLE_persons.sql -U postgres -d postgres\nSET\nCREATE SCHEMA\nALTER SCHEMA\nSET\nCREATE TABLE\nVerify the table\npostgres=# select * from abc.persons;\n personid | lastname | firstname | address | city\n----------+----------+-----------+---------+------\n(0 rows)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Suggestion: Since <strong>Ora2Pg<\/strong> is written in Perl, using it for data migration is not recommended. Instead, use Ora2Pg for schema migration, and migrating data, consider leveraging ETL tools like <strong>Pentaho<\/strong> to design a more efficient and scalable data migration strategy.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion:<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Migrating an Oracle database to PostgreSQL using the&nbsp;<strong>ora2pg<\/strong>&nbsp;tool can significantly streamline the transition process. This approach allows for a structured and automated method of transferring schemas from Oracle to PostgreSQL, facilitating compatibility between these two powerful database platforms.<br>In this specific case, after setting up&nbsp;<strong>Oracle 21c<\/strong>&nbsp;and&nbsp;<strong>PostgreSQL 16<\/strong>&nbsp;in Docker containers, the migration steps involved:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Installation of<code> ora2pg<\/code><\/strong>\u00a0on the Oracle Docker container.<\/li>\n\n\n\n<li><strong>Configuration<\/strong>\u00a0of <code>ora2pg<\/code>, ensuring that the correct Oracle connection settings were in place.<\/li>\n\n\n\n<li><strong>Exporting the Oracle schema<\/strong>\u00a0using <code>ora2pg<\/code>, and then\u00a0<strong>importing<\/strong>\u00a0the schema into PostgreSQL.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">While\u00a0<strong>ora2pg<\/strong>\u00a0is effective for schema migration, it&#8217;s important to note that this tool, being written in Perl, may not be the best choice for data migration due to performance limitations and complexity. You could use <strong><code>ora2pg<\/code><\/strong> for schema migration, and rely on <strong>ETL tools<\/strong>\u00a0like\u00a0<strong>Pentaho<\/strong>\u00a0for migrating user\/application data. This would be a much better and recommended way for a more scalable, efficient, and robust data transfer.<\/p>\n\n\n\n<div class=\"wp-block-group alignfull has-text-color has-background is-layout-flow wp-block-group-is-layout-flow\" style=\"color:#000000;background-color:#ffffff\">\n<div style=\"height:64px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-text-align-center has-small-font-size wp-block-paragraph\" style=\"line-height:.9\"><\/p>\n\n\n\n<h4 class=\"wp-block-heading has-text-align-center\" id=\"schedule-a-visit\" style=\"font-size:59px;line-height:1.15\">Schedule a Call for a Free schema assessment<\/h4>\n\n\n\n<div class=\"wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-cbcdc57d wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button has-custom-width wp-block-button__width-50\"><a class=\"wp-block-button__link has-text-color has-background wp-element-button\" href=\"https:\/\/test.opensource-db.in\/wp1\/contactus\/\" style=\"border-radius:50px;color:#ffffff;background-color:#000000\">Contact us<\/a><\/div>\n<\/div>\n\n\n\n<div style=\"height:64px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction: Here&#8217;s my first attempt at blogging about my favourite database PostgreSQL: The World&#8217;s Most Advanced Open Source Relational Database. [&hellip;]<\/p>\n","protected":false},"author":20,"featured_media":6334,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[42,89],"tags":[121,120,118,119,26,114],"class_list":["post-6320","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-postgresql-15","category-postgresql-16","tag-migratetofoss","tag-migration","tag-ora2pg","tag-oracle","tag-postgresql","tag-postgresql16"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>An Introduction to migrating from Oracle to PostgreSQL using ora2pg - OpenSource DB<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"An Introduction to migrating from Oracle to PostgreSQL using ora2pg - OpenSource DB\" \/>\n<meta property=\"og:description\" content=\"Introduction: Here&#8217;s my first attempt at blogging about my favourite database PostgreSQL: The World&#8217;s Most Advanced Open Source Relational Database. [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/\" \/>\n<meta property=\"og:site_name\" content=\"OpenSource DB\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/people\/OpenSource-DB\/100072970755470\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-13T13:29:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-02-06T12:04:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/11\/image-11.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"945\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lokesh Mandyam\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@opensource_db\" \/>\n<meta name=\"twitter:site\" content=\"@opensource_db\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lokesh Mandyam\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/\"},\"author\":{\"name\":\"Lokesh Mandyam\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/person\/df72407df12174ffefa34535b1120929\"},\"headline\":\"An Introduction to migrating from Oracle to PostgreSQL using ora2pg\",\"datePublished\":\"2024-11-13T13:29:23+00:00\",\"dateModified\":\"2025-02-06T12:04:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/\"},\"wordCount\":604,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#organization\"},\"image\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/11\/image-11.png\",\"keywords\":[\"migratetoFOSS\",\"migration\",\"ora2pg\",\"oracle\",\"postgresql\",\"postgresql16\"],\"articleSection\":[\"PostgreSQL 15\",\"PostgreSQL 16\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/\",\"url\":\"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/\",\"name\":\"An Introduction to migrating from Oracle to PostgreSQL using ora2pg - OpenSource DB\",\"isPartOf\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/11\/image-11.png\",\"datePublished\":\"2024-11-13T13:29:23+00:00\",\"dateModified\":\"2025-02-06T12:04:26+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/#primaryimage\",\"url\":\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/11\/image-11.png\",\"contentUrl\":\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/11\/image-11.png\",\"width\":1800,\"height\":945},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/test.opensource-db.in\/wp1\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"An Introduction to migrating from Oracle to PostgreSQL using ora2pg\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#website\",\"url\":\"https:\/\/test.opensource-db.in\/wp1\/\",\"name\":\"OpenSource DB\",\"description\":\"Your Trusted OpenSource Databases partner\",\"publisher\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/test.opensource-db.in\/wp1\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#organization\",\"name\":\"OPENSOURCE DB PRIVATE LIMITED\",\"url\":\"https:\/\/test.opensource-db.in\/wp1\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/osdb-logo-tm-2.png\",\"contentUrl\":\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/osdb-logo-tm-2.png\",\"width\":368,\"height\":120,\"caption\":\"OPENSOURCE DB PRIVATE LIMITED\"},\"image\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/people\/OpenSource-DB\/100072970755470\/\",\"https:\/\/x.com\/opensource_db\",\"https:\/\/www.youtube.com\/channel\/UCmTI5h\",\"https:\/\/www.linkedin.com\/company\/opensource-db\",\"https:\/\/www.instagram.com\/opensource_db\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/person\/df72407df12174ffefa34535b1120929\",\"name\":\"Lokesh Mandyam\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ed40b2db95ad8d925a250fc4cff81508442f1b7187fb607bb790a3c801fb2072?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ed40b2db95ad8d925a250fc4cff81508442f1b7187fb607bb790a3c801fb2072?s=96&d=mm&r=g\",\"caption\":\"Lokesh Mandyam\"},\"url\":\"https:\/\/test.opensource-db.in\/wp1\/author\/lokesh\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"An Introduction to migrating from Oracle to PostgreSQL using ora2pg - OpenSource DB","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"An Introduction to migrating from Oracle to PostgreSQL using ora2pg - OpenSource DB","og_description":"Introduction: Here&#8217;s my first attempt at blogging about my favourite database PostgreSQL: The World&#8217;s Most Advanced Open Source Relational Database. [&hellip;]","og_url":"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/","og_site_name":"OpenSource DB","article_publisher":"https:\/\/www.facebook.com\/people\/OpenSource-DB\/100072970755470\/","article_published_time":"2024-11-13T13:29:23+00:00","article_modified_time":"2025-02-06T12:04:26+00:00","og_image":[{"width":1800,"height":945,"url":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/11\/image-11.png","type":"image\/png"}],"author":"Lokesh Mandyam","twitter_card":"summary_large_image","twitter_creator":"@opensource_db","twitter_site":"@opensource_db","twitter_misc":{"Written by":"Lokesh Mandyam","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/#article","isPartOf":{"@id":"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/"},"author":{"name":"Lokesh Mandyam","@id":"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/person\/df72407df12174ffefa34535b1120929"},"headline":"An Introduction to migrating from Oracle to PostgreSQL using ora2pg","datePublished":"2024-11-13T13:29:23+00:00","dateModified":"2025-02-06T12:04:26+00:00","mainEntityOfPage":{"@id":"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/"},"wordCount":604,"commentCount":0,"publisher":{"@id":"https:\/\/test.opensource-db.in\/wp1\/#organization"},"image":{"@id":"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/#primaryimage"},"thumbnailUrl":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/11\/image-11.png","keywords":["migratetoFOSS","migration","ora2pg","oracle","postgresql","postgresql16"],"articleSection":["PostgreSQL 15","PostgreSQL 16"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/","url":"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/","name":"An Introduction to migrating from Oracle to PostgreSQL using ora2pg - OpenSource DB","isPartOf":{"@id":"https:\/\/test.opensource-db.in\/wp1\/#website"},"primaryImageOfPage":{"@id":"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/#primaryimage"},"image":{"@id":"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/#primaryimage"},"thumbnailUrl":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/11\/image-11.png","datePublished":"2024-11-13T13:29:23+00:00","dateModified":"2025-02-06T12:04:26+00:00","breadcrumb":{"@id":"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/#primaryimage","url":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/11\/image-11.png","contentUrl":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/11\/image-11.png","width":1800,"height":945},{"@type":"BreadcrumbList","@id":"https:\/\/test.opensource-db.in\/wp1\/an-introduction-to-migrating-from-oracle-to-postgresql-using-ora2pg\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/test.opensource-db.in\/wp1\/"},{"@type":"ListItem","position":2,"name":"An Introduction to migrating from Oracle to PostgreSQL using ora2pg"}]},{"@type":"WebSite","@id":"https:\/\/test.opensource-db.in\/wp1\/#website","url":"https:\/\/test.opensource-db.in\/wp1\/","name":"OpenSource DB","description":"Your Trusted OpenSource Databases partner","publisher":{"@id":"https:\/\/test.opensource-db.in\/wp1\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/test.opensource-db.in\/wp1\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/test.opensource-db.in\/wp1\/#organization","name":"OPENSOURCE DB PRIVATE LIMITED","url":"https:\/\/test.opensource-db.in\/wp1\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/logo\/image\/","url":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/osdb-logo-tm-2.png","contentUrl":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/osdb-logo-tm-2.png","width":368,"height":120,"caption":"OPENSOURCE DB PRIVATE LIMITED"},"image":{"@id":"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/people\/OpenSource-DB\/100072970755470\/","https:\/\/x.com\/opensource_db","https:\/\/www.youtube.com\/channel\/UCmTI5h","https:\/\/www.linkedin.com\/company\/opensource-db","https:\/\/www.instagram.com\/opensource_db\/"]},{"@type":"Person","@id":"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/person\/df72407df12174ffefa34535b1120929","name":"Lokesh Mandyam","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ed40b2db95ad8d925a250fc4cff81508442f1b7187fb607bb790a3c801fb2072?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ed40b2db95ad8d925a250fc4cff81508442f1b7187fb607bb790a3c801fb2072?s=96&d=mm&r=g","caption":"Lokesh Mandyam"},"url":"https:\/\/test.opensource-db.in\/wp1\/author\/lokesh\/"}]}},"rttpg_featured_image_url":{"full":["https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/11\/image-11.png",1800,945,false],"landscape":["https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/11\/image-11.png",1800,945,false],"portraits":["https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/11\/image-11.png",1800,945,false],"thumbnail":["https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/11\/image-11-150x150.png",150,150,true],"medium":["https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/11\/image-11-300x158.png",300,158,true],"large":["https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/11\/image-11-1024x538.png",1024,538,true],"1536x1536":["https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/11\/image-11-1536x806.png",1536,806,true],"2048x2048":["https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/11\/image-11.png",1800,945,false],"ultp_layout_landscape_large":["https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/11\/image-11.png",1200,630,false],"ultp_layout_landscape":["https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/11\/image-11.png",870,457,false],"ultp_layout_portrait":["https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/11\/image-11.png",600,315,false],"ultp_layout_square":["https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/11\/image-11.png",600,315,false]},"rttpg_author":{"display_name":"Lokesh Mandyam","author_link":"https:\/\/test.opensource-db.in\/wp1\/author\/lokesh\/"},"rttpg_comment":0,"rttpg_category":"<a href=\"https:\/\/test.opensource-db.in\/wp1\/category\/postgres\/postgresql-15\/\" rel=\"category tag\">PostgreSQL 15<\/a> <a href=\"https:\/\/test.opensource-db.in\/wp1\/category\/postgres\/postgresql-16\/\" rel=\"category tag\">PostgreSQL 16<\/a>","rttpg_excerpt":"Introduction: Here&#8217;s my first attempt at blogging about my favourite database PostgreSQL: The World&#8217;s Most Advanced Open Source Relational Database. [&hellip;]","_links":{"self":[{"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/posts\/6320","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/users\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/comments?post=6320"}],"version-history":[{"count":14,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/posts\/6320\/revisions"}],"predecessor-version":[{"id":7127,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/posts\/6320\/revisions\/7127"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/media\/6334"}],"wp:attachment":[{"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/media?parent=6320"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/categories?post=6320"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/tags?post=6320"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}