{"id":7552,"date":"2021-08-04T15:30:02","date_gmt":"2021-08-04T10:00:02","guid":{"rendered":"https:\/\/opstree.com\/blog\/\/?p=7552"},"modified":"2025-11-20T15:36:04","modified_gmt":"2025-11-20T10:06:04","slug":"the-migration-of-postgresql-using-azure-dms","status":"publish","type":"post","link":"https:\/\/opstree.com\/blog\/2021\/08\/04\/the-migration-of-postgresql-using-azure-dms\/","title":{"rendered":"The Migration of Postgresql using Azure DMS"},"content":{"rendered":"\r\n<p>Azure Database Migration Service can be used to migrate the databases from an on-premises PostgreSQL instance to Azure Database for PostgreSQL with minimal downtime to the application.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"2276\" height=\"1200\" class=\"wp-image-7600\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2021\/08\/continuoussync.png?w=1024\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p><!--more--><\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\"><strong>Prerequisites:-<\/strong><\/h3>\r\n\r\n\r\n\r\n<p><strong>Setup Postgresql on a azure VM<\/strong><\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/0*I2Jqm-eK65Fzm2DM\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p><strong>Enable CDC and connection settings in source DB\u2019s postgresql.conf file<\/strong><\/p>\r\n\r\n\r\n\r\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\r\n<blockquote class=\"wp-block-quote has-text-align-left is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p>#\u200a\u2014\u200aConnection Settings &#8211;<\/p>\r\n<\/blockquote>\r\n\r\n\r\n\r\n<blockquote class=\"wp-block-quote has-text-align-left is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p>listen_addresses = \u2018*\u2019 # what IP address(es) to listen on;<\/p>\r\n<\/blockquote>\r\n\r\n\r\n\r\n<blockquote class=\"wp-block-quote has-text-align-left is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p>#\u200a\u2014\u200aSettings &#8211;<\/p>\r\n<\/blockquote>\r\n\r\n\r\n\r\n<blockquote class=\"wp-block-quote has-text-align-left is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p>wal_level = logical # minimal, replica, or logical<\/p>\r\n<\/blockquote>\r\n\r\n\r\n\r\n<blockquote class=\"wp-block-quote has-text-align-left is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p># (change requires restart)<\/p>\r\n<\/blockquote>\r\n\r\n\r\n\r\n<blockquote class=\"wp-block-quote has-text-align-left is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p># REPLICATION<\/p>\r\n<\/blockquote>\r\n\r\n\r\n\r\n<blockquote class=\"wp-block-quote has-text-align-left is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p># Set these on the master and on any standby that will send replication data.<\/p>\r\n<\/blockquote>\r\n\r\n\r\n\r\n<blockquote class=\"wp-block-quote has-text-align-left is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p>max_wal_senders = 10 # max number of walsender processes<\/p>\r\n<\/blockquote>\r\n\r\n\r\n\r\n<blockquote class=\"wp-block-quote has-text-align-left is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p># (change requires restart)<\/p>\r\n<\/blockquote>\r\n\r\n\r\n\r\n<blockquote class=\"wp-block-quote has-text-align-left is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p>max_replication_slots = 5 # max number of replication slots<\/p>\r\n<\/blockquote>\r\n\r\n\r\n\r\n<blockquote class=\"wp-block-quote has-text-align-left is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p># (change requires restart)<\/p>\r\n<\/blockquote>\r\n<\/div><\/div>\r\n\r\n\r\n\r\n<p>Restart the postgres service.<\/p>\r\n\r\n\r\n\r\n<p><strong>Download dvdrental sample data from google<\/strong>\u00a0<\/p>\r\n\r\n\r\n\r\n<p>Created one Database named test and importing dvdrental in to test Database.<\/p>\r\n\r\n\r\n\r\n<p>pg_restore -U postgres -d test dvdrental.tar<\/p>\r\n\r\n\r\n\r\n<p>Login to source DB and verify the data.<\/p>\r\n\r\n\r\n\r\n<p><em>psql \u201chost=akankshaVM port=5432 dbname=postgres user=postgres<\/em><\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/0*AER9Qugd85f2O48J\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p>Now our source DB is ready.<\/p>\r\n\r\n\r\n\r\n<p>Now create a <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/postgresql\/\" target=\"_blank\" rel=\"noreferrer noopener\">Azure Database for PostgreSQL<\/a> which is managed by azure.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/0*2wEjY1cV951u6OVL\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p>Enable logical replication and update firewall settings<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/0*4Mz219CURy7CJT75\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p>Firewall setting-<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/0*ChFeiHho9iCHiY38\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\"><strong>Migrate the sample\u00a0schema<\/strong><\/h3>\r\n\r\n\r\n\r\n<p><strong>Migrate the schema from source to destination using pg_dump utility<\/strong><\/p>\r\n\r\n\r\n\r\n<p>To complete all the database objects like table schemas, indexes and stored procedures, we need to extract schema from the source database and apply to the database.<\/p>\r\n\r\n\r\n\r\n<p>Use pg_dump -s command to create a schema dump file for a database.<\/p>\r\n\r\n\r\n\r\n<p>pg_dump -o -h hostname -U db_username -d db_name -s &gt; your_schema.sql<\/p>\r\n\r\n\r\n\r\n<p>For example, to create a schema dump file for the test database:<\/p>\r\n\r\n\r\n\r\n<p><strong>pg_dump -o -h akankshaVM -U postgres -d test -s -O -x &gt; dvdrentalSchema.sql<\/strong><\/p>\r\n\r\n\r\n\r\n<p>Create an empty database in your target environment, which is Azure Database for PostgreSQL.<\/p>\r\n\r\n\r\n\r\n<p>Import the schema into the target database you created by restoring the schema dump file.<\/p>\r\n\r\n\r\n\r\n<p>psql -h hostname -U db_username -d db_name &lt; your_schema.sql<\/p>\r\n\r\n\r\n\r\n<p>For example:-<\/p>\r\n\r\n\r\n\r\n<p><strong>psql -h postgresql-destination.postgres.database.azure.com -U akanksha@postgresql-destination -d dvdrental &lt; dvdrentalSchema.sql<\/strong><\/p>\r\n<p><strong>[ looking for <a href=\"https:\/\/opstree.com\/services\/database-and-data-engineering\/\" target=\"_blank\" rel=\"noopener\">data warehousing services<\/a> ]<\/strong><\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Register the Microsoft.DataMigration resource\u00a0provider<\/h3>\r\n\r\n\r\n\r\n<ol>\r\n<li>Sign in to the Azure portal, select All services, and then select Subscriptions.<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/0*KN9gv2W6QDfPPjB1\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p>2. Select the subscription in which you want to create the instance of Azure Database Migration Service, and then select Resource providers.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/0*y6ENjSBsMnHgSEH-\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p>3. Search for migration, and then to the right of Microsoft.<a href=\"https:\/\/opstree.com\/blog\/2025\/01\/14\/part-2-automating-data-migration-with-apache-airflow\/\" target=\"_blank\" rel=\"noopener\">DataMigration<\/a>, select Register.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/0*6EmYMDEX0wu5N3oN\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Create a DMS\u00a0instance<\/h3>\r\n\r\n\r\n\r\n<ol>\r\n<li>In the Azure portal, select + Create a resource, search for Azure Database Migration Service, and then select Azure Database Migration Service from the drop-down list.<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/0*ldUzUekOyNso-jJl\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p>2. On the Azure <a href=\"https:\/\/opstree.com\/blog\/2023\/06\/20\/database-migration-service-in-aws\/\" target=\"_blank\" rel=\"noopener\">Database Migration Service<\/a> screen, select Create.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/0*jmhz-fwzJ0Mg6kaF\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p>3. On the Create Migration Service screen, specify a name, the subscription, a new or existing resource group, and the location for the service.<\/p>\r\n\r\n\r\n\r\n<p>4. Select an existing virtual network or create a new one.<br \/>The virtual network provides Azure Database Migration Service with access to the source PostgreSQL server and the target Azure Database for <a href=\"https:\/\/opstree.com\/blog\/2025\/10\/07\/postgresql-performance-with-pgbouncer\/\" target=\"_blank\" rel=\"noopener\">PostgreSQL<\/a> instance.<\/p>\r\n\r\n\r\n\r\n<p>5. Select a pricing tier.<br \/>\u00a0Premium SKU is recommended for online Data Migration<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2021\/08\/98924-1tepy5mehvocwhjr_upntbw.png\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p>6. Select Review + create to create the service.<br \/>\u00a0Service creation will complete within about 10 to 15 minutes.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Create a migration project<\/h3>\r\n\r\n\r\n\r\n<p>After the service is created, locate it within the Azure portal, open it, and then create a new migration project.<\/p>\r\n\r\n\r\n\r\n<ol>\r\n<li>In the Azure portal, select All services, search for Azure Database Migration Service, and then select Azure Database Migration Services.<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/0*b-RyRL3-y2DVzBSy\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p>2. On the Azure Database Migration Services screen, search for the name of Azure Database Migration Service instance that you created, select the instance, and then select + New Migration Project.<\/p>\r\n\r\n\r\n\r\n<p>3. On the New migration project screen, specify a name for the project, in the Source server type text box, select PostgreSQL, in the Target server type text box, select Azure Database for PostgreSQL.<\/p>\r\n\r\n\r\n\r\n<p>4. In the Choose type of activity section, select Online data migration.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/0*yubw79p7Ae1N252Y\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p><strong>Note<\/strong><br \/>Alternately, you can choose Create project only to create the migration project now and execute the migration later.<\/p>\r\n\r\n\r\n\r\n<p>5. Select Save, note the requirements to successfully use Azure Database Migration Service to migrate data, and then select Create and run activity.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Specify source\u00a0details<\/h3>\r\n\r\n\r\n\r\n<p>On the Add Source Details screen, specify the connection details for the source PostgreSQL instance.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/0*9LhJfwbCVElWhiiH\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Specify target\u00a0details<\/h3>\r\n\r\n\r\n\r\n<p>On the Target details screen, specify the connection details for the target server, which is the pre-provisioned instance of Azure Postgresql to which the DVD Rentals schema was deployed by using pg_dump.<\/p>\r\n\r\n\r\n\r\n<p>If the target database contains the same database name as the source database, Azure Database Migration Service selects the target database by default.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/0*uKalOH6EpfLKZtbB\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p>Select Save, and then on the Map to target databases screen, map the source and the target database for migration.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/0*_UoDW9p30wxTJAJI\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/0*gaMWX0DSGZsmqrWP\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p>Select Save, and then on the Migration settings screen, accept the default values.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/0*VTXRLps7fbGTQYN2\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p>Select Save, on the Migration summary screen, in the Activity name text box, specify a name for the migration activity, and then review the summary to ensure that the source and target details match what you previously specified.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/0*eJOcu22N6oijZ3Dw\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><strong>Run the migration<\/strong><\/h2>\r\n\r\n\r\n\r\n<ol>\r\n<li>Select Run migration.<br \/>The migration activity window appears, and the Status of the activity should update to show as Backup in Progress.<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/0*OE9W2RLq5mbjjjod\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Monitor the migration<\/h3>\r\n\r\n\r\n\r\n<ol>\r\n<li>On the migration activity screen, select Refresh to update the display until the Status of the migration shows as Complete.<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/0*x3AaJu9iLJfD7e_1\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p>2. When the migration is complete, under Database Name, select a specific database to get to the migration status for Full data load and Incremental data sync operations.<\/p>\r\n\r\n\r\n\r\n<p><strong>Note:-<\/strong><br \/>Full data load shows the initial load migration status, while Incremental data sync shows change data capture (CDC) status.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/0*1hPlTgIBgvzaMeTU\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Perform migration cutover<\/h3>\r\n\r\n\r\n\r\n<p>After the initial Full load is completed, the databases are marked Ready to cutover.<\/p>\r\n\r\n\r\n\r\n<ol>\r\n<li>When you\u2019re ready to complete the database migration, select Start Cutover.<\/li>\r\n<li>Wait until the Pending changes counter shows 0 to ensure that all incoming transactions to the source database are stopped, select the Confirm checkbox, and then select Apply.<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/0*FY6G2MNT-MWdi2VC\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p>3. When the database migration status shows Completed, <a href=\"https:\/\/wiki.postgresql.org\/wiki\/Fixing_Sequences\" target=\"_blank\" rel=\"noreferrer noopener\">recreate sequences<\/a> (if applicable), and connect your applications to the new target instance of Azure Database for PostgreSQL.<\/p>\r\n\r\n\r\n\r\n\r\n\r\n<p>Related Searches:\u00a0 <a href=\"https:\/\/opstree.com\/\" target=\"_blank\" rel=\"noopener\">DevOps solution provider<\/a> | <a href=\"https:\/\/opstree.com\/aws-partner\/\" target=\"_blank\" rel=\"noopener\">AWS Partner<\/a>\u00a0<\/p>\r\n\r\n\r\n\r\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\"><\/div>\r\n\r\n\r\n\r\n<ul class=\"wp-block-social-links aligncenter items-justified-right is-layout-flex wp-block-social-links-is-layout-flex\"><li class=\"wp-social-link wp-social-link-linkedin  wp-block-social-link\"><a href=\"https:\/\/www.linkedin.com\/company\/opstree-solutions\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">LinkedIn<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-youtube  wp-block-social-link\"><a href=\"https:\/\/www.youtube.com\/channel\/UCeLma6SpNYH7jjYKSBNSexw\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">YouTube<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-github  wp-block-social-link\"><a href=\"https:\/\/github.com\/OpsTree\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">GitHub<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-facebook  wp-block-social-link\"><a href=\"https:\/\/www.facebook.com\/opstree\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Facebook<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-medium  wp-block-social-link\"><a href=\"https:\/\/medium.com\/buildpiper\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M20.962,7.257l-5.457,8.867l-3.923-6.375l3.126-5.08c0.112-0.182,0.319-0.286,0.527-0.286c0.05,0,0.1,0.008,0.149,0.02 c0.039,0.01,0.078,0.023,0.114,0.041l5.43,2.715l0.006,0.003c0.004,0.002,0.007,0.006,0.011,0.008 C20.971,7.191,20.98,7.227,20.962,7.257z M9.86,8.592v5.783l5.14,2.57L9.86,8.592z M15.772,17.331l4.231,2.115 C20.554,19.721,21,19.529,21,19.016V8.835L15.772,17.331z M8.968,7.178L3.665,4.527C3.569,4.479,3.478,4.456,3.395,4.456 C3.163,4.456,3,4.636,3,4.938v11.45c0,0.306,0.224,0.669,0.498,0.806l4.671,2.335c0.12,0.06,0.234,0.088,0.337,0.088 c0.29,0,0.494-0.225,0.494-0.602V7.231C9,7.208,8.988,7.188,8.968,7.178z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Medium<\/span><\/a><\/li><\/ul>\r\n\r\n\r\n","protected":false},"excerpt":{"rendered":"<p>Azure Database Migration Service can be used to migrate the databases from an on-premises PostgreSQL instance to Azure Database for PostgreSQL with minimal downtime to the application.<\/p>\n","protected":false},"author":209758677,"featured_media":29900,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[768739361],"tags":[768739427,768739342,343865],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/opstree.com\/blog\/wp-content\/uploads\/2025\/11\/DevSecOps-1.jpg","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pfDBOm-1XO","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/7552"}],"collection":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/users\/209758677"}],"replies":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/comments?post=7552"}],"version-history":[{"count":10,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/7552\/revisions"}],"predecessor-version":[{"id":29930,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/7552\/revisions\/29930"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media\/29900"}],"wp:attachment":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media?parent=7552"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/categories?post=7552"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/tags?post=7552"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}