Exploring Interoperability: Accessing Objects in Foreign Databases via PostgreSQL


In today’s digital age, data is the backbone of any organization’s success. As businesses grow and expand, so does their data footprint. Often, this data is spread across different database management systems (DBMS) like Oracle, Microsoft SQL Server, MySQL, and PostgreSQL.

These DBMS can be incompatible with each other due to their unique architectures and syntaxes. This is where interoperability comes in – the ability of these disparate systems to communicate and exchange data seamlessly.

Interoperability enables businesses to access objects from foreign databases without having to migrate or duplicate the data. This results in cost savings, reduced complexity, and improved efficiency.

One way to achieve interoperability is by using PostgreSQL – an open-source relational database management system known for its scalability and extensibility. PostgreSQL allows developers to access objects from different databases using a feature called Foreign Data Wrapper (FDW).

Explanation of Interoperability in Database Management Systems

In simple terms, interoperability refers to the ability of different software systems or components to work together seamlessly without any issues. In the world of database management systems (DBMS), it means allowing users to access objects such as tables or views from one DBMS into another DBMS without any problems. This interoperability capability has become increasingly important over time as organizations have started adopting various DBMSs for different purposes.

For example, a company may use Oracle for its finance department while using PostgreSQL for its marketing department. Now if both departments need to collaborate on a project that requires accessing each other’s data, then achieving interoperability between these two DBMSs becomes critical.

Importance of Accessing Objects in Foreign Databases

Accessing objects in foreign databases can be crucial for businesses with diverse data sources spread across multiple systems. It helps organizations avoid duplicating or migrating large amounts of sensitive data between various platforms, reducing overall costs and simplifying data management. Moreover, accessing objects in foreign databases promotes data integration across an organization’s systems.

It enables efficient analysis of the data stored in different platforms, providing a more comprehensive view of a business’s operations. This can help organizations make better decisions faster as they have access to all the relevant data.

Overview of PostgreSQL and Its Capabilities in Achieving Interoperability

PostgreSQL is one of the most popular open-source relational database management systems used today. It is known for its robustness, scalability, and extensibility.

PostgreSQL has several features that make it an ideal platform for achieving interoperability between different DBMSs. PostgreSQL’s Foreign Data Wrapper (FDW) feature allows users to access objects from other databases using different protocols such as ODBC or JDBC drivers.

It supports various FDWs such as MySQL_fdw, Oracle_fdw, and SQL Server_fdw that allow users to access data from foreign databases easily. In addition to FDW support, PostgreSQL also has several other features like built-in JSON support, full-text search capabilities, and advanced indexing options that make it suitable for various use cases that require complex queries or large datasets.

Understanding PostgreSQL Foreign Data Wrapper (FDW)

Foreign Data Wrapper (FDW) is a feature in PostgreSQL that allows users to access data stored in other database management systems through a single interface. In simple terms, FDW acts as a mediator between the user and the foreign database. It allows users to retrieve data from different sources without having to switch between different database management systems.

Definition and Purpose of FDW

FDW is an extension module that provides access to foreign data sources and makes them appear as if they are local tables. It is used by users who need to access data stored in other databases without migrating it into their local PostgreSQL database. The purpose of FDW is to simplify the process of accessing data from multiple databases while maintaining consistency across all the systems.

Types of FDWs available in PostgreSQL

PostgreSQL provides several built-in FDWs that can be used for accessing different types of databases such as Oracle, MySQL, SQLite, etc. Additionally, there are third-party FDWs created by developers that can be used for accessing proprietary databases or services such as Twitter or Facebook. The most commonly used built-in FDWs are:

  • postgres_fdw: this is the default foreign data wrapper and it allows connecting two postgresql databases.
  • oracle_fdw: this allows retrieving data from an oracle database.
  • mysql_fdw: this allows retrieving data from a mysql database.

Advantages and Limitations of using FDW

The advantages of using FDW include:

  • Simplicity: the use of a single interface simplifies the process of retrieving data from multiple sources by reducing the complexity involved with switching between different database management systems.
  • Efficiency: fdw allows users to access data stored in other databases without the need of copying the data into their local postgresql database, thus reducing storage requirements.
  • Flexibility: FDW can be used with a wide range of foreign databases and services, making it possible to retrieve data from multiple sources with ease.

The limitations of using FDW are:

  • Performance: the performance of fdws can vary depending on the type of database being accessed and the network connectivity between the user and the foreign database.
  • Data Type Mapping: To use FDW, there must be a mapping between the data types used in PostgreSQL and those used in the foreign database. This can lead to issues when dealing with non-standard data types.
  • Data Consistency: Because foreign tables are not stored locally, ensuring consistency across all systems can be challenging. Any updates made to foreign tables must be synchronized with changes made in foreign databases to maintain consistency.

Overall, FDW is a powerful tool for achieving interoperability between different databases. It provides an efficient way of retrieving data from different sources while maintaining consistency across all systems. However, it is important to consider its limitations when deciding whether or not to use it for accessing objects in foreign databases via PostgreSQL.

Configuring PostgreSQL for Interoperability

Setting up a foreign server in PostgreSQL

To access data from a foreign database via PostgreSQL, you first have to set up a “foreign server” in PostgreSQL. This is done using the CREATE SERVER command, which specifies the name of the foreign server, its type (for example, Oracle or MySQL), and its connection parameters (such as the hostname, port number, username and password).

For example, if you want to access data from an Oracle database using PostgreSQL’s Foreign Data Wrapper (FDW), you would use the following command to create a foreign server:

CREATE SERVER myoracle FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbname ‘orcl’, host ‘localhost’, port ‘1521’);

This command creates a foreign server named “myoracle” that connects to an Oracle database running on localhost on port 1521 with the name “orcl”. Once this is done, you can create user mappings and define foreign tables that refer to objects in this database.

Creating a user mapping for authentication

To connect to a foreign server and access its data via FDW, you need to provide authentication credentials for your remote account. In PostgreSQL, this is done by creating a “user mapping” between your local user account and your remote account on the foreign server. This can be done using the CREATE USER MAPPING command.

For example:

CREATE USER MAPPING FOR postgres SERVER myoracle OPTIONS (user ‘scott’, password ‘tiger’);

This command creates a user mapping for the local PostgreSQL user “postgres”, connecting it with the “scott” account on Oracle’s database through myoracle. The password field refers to Scott’s Oracle database login credentials.

Defining foreign tables for accessing data from other databases

Once a foreign server is set up and user mappings are created, you can define “foreign tables” in PostgreSQL that refer to objects in the foreign database. This is done using the CREATE FOREIGN TABLE command. For example, to create a foreign table named “customers” that refers to a table of the same name in an Oracle database, you would use:


id integer, name character varying )

SERVER myoracle OPTIONS (schema_name ‘HR’, table_name ‘customers’);

This command creates a new foreign table named “customers” with two columns (id and name), which corresponds to the schema HR’s customers table on Oracle database. With this configuration now complete, accessing data from this remote database is as simple as querying it with SQL commands via PostgresSQL.

Accessing Objects from Foreign Databases via PostgreSQL

Querying data from foreign tables using SQL commands

PostgreSQL has a rich set of SQL commands that can be used to query data from foreign tables. For instance, the SELECT statement can select columns from one or more foreign tables while joining with local tables. Example:

SELECT ft1.column1, ft2.column2 

FROM public.foreign_table_1 AS ft1 JOIN public.foreign_table_2 AS ft2 ON (ft1.id = ft2.id);

This statement retrieves columns column1 and column2 from two foreign tables joined on their primary key. Care should be taken when querying remote databases as performance issues may arise depending on the size of the remote database and network traffic.

Retrieving data from Oracle, MySQL, and other databases using FDWs

PostgreSQL allows access to multiple types of external databases through its extensible Foreign Data Wrapper (FDW) framework. FDWs exist for several popular database management systems such as Oracle, MySQL, and Microsoft SQL Server.

To retrieve data from an external database via an FDW in PostgreSQL, first a server object must be created that holds information about the external database’s connection parameters. The user mapping must then be defined for authentication purposes followed by defining the foreign table(s) in PostgreSQL. Note:

To use an FDW with PostgreSQL requires installation of the necessary extension(s) on both the local and remote servers.

Performing joins between local and foreign tables

Joins between local and foreign tables are performed similarly to joins between two local tables as shown in the example above. The join condition is used to match rows based on their primary or foreign key relationships. Performance issues may arise with large remote databases, so it is important to optimize the join to minimize network traffic.

Best Practices for Interoperability with PostgreSQL

Security considerations when accessing objects in foreign databases via PostgresSQL

When accessing data from external databases, it is important to ensure that security is taken into consideration. This includes ensuring that the necessary user mapping is defined and that passwords are not stored in plain text. Additionally, access permissions must be set accordingly to prevent unauthorized access.

Performance considerations when querying data from multiple sources

When working with multiple databases, performance can become an issue due to network latency and the amount of data being transferred. To mitigate these issues, indexes should be created on foreign tables to speed up querying and caching should be implemented where possible. Note:

Queries against remote databases will typically take longer than queries against local tables due to network latency.

Troubleshooting common issues when working with FDWs

Some common issues when working with FDWs include connection timeouts and database version compatibility issues between local and remote servers. It is recommended to consult the documentation for each specific FDW when encountering any issues as they may have specific solutions or workarounds.


Achieving interoperability through PostgreSQL’s FDW allows for seamless integration of external database objects into a local PostgreSQL database. While there are some performance considerations and security concerns that must be addressed, the benefits of achieving interoperability greatly outweigh these challenges. By following best practices such as optimizing queries and securing connections, users can take full advantage of this powerful feature in PostgreSQL.

Related Articles