{"id":9957,"date":"2014-08-05T10:00:12","date_gmt":"2014-08-05T08:00:12","guid":{"rendered":"https:\/\/www.credativ.de\/blog\/credativ-inside\/informix-foreign-data-wrapper-for-postgresql\/"},"modified":"2014-08-05T10:00:12","modified_gmt":"2014-08-05T08:00:12","slug":"informix-foreign-data-wrapper-for-postgresql","status":"publish","type":"post","link":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/informix-foreign-data-wrapper-for-postgresql\/","title":{"rendered":"Informix Foreign Data Wrapper for PostgreSQL<sup>\u00ae<\/sup>"},"content":{"rendered":"<div class=\"field field-name-body field-type-text-with-summary field-label-hidden\">\n<div class=\"field-items\">\n<div class=\"field-item even\">\n<p>Since PostgreSQL<sup>\u00ae<\/sup> 9.1, PostgreSQL<sup>\u00ae<\/sup> has implemented an interface for accessing external data sources. The interface defined in the SQL Standard (SQL\/MED) allows transparent access to and manipulation of external data sources in the same manner as with PostgreSQL<sup>\u00ae<\/sup>-native tables. External data sources appear as tables in the respective database and can be used without restriction in SQL statements. Access is implemented via a so-called Foreign Data Wrapper (FDW), which forms the interface between PostgreSQL<sup>\u00ae<\/sup> and the external data source. The FDW is also responsible for mapping data types or non-relational data sources to the table structure accordingly. This also enables the connection of non-relational data sources such as Hadoop, Redis, among others. An overview of some available Foreign Data Wrappers can be found in the <a href=\"https:\/\/wiki.postgresql.org\/wiki\/FDW\" target=\"_blank\" rel=\"noopener noreferrer\">PostgreSQL<sup>\u00ae<\/sup> Wiki<\/a>.     <\/p>\n<h2>Informix FDW<\/h2>\n<p>In the context of many Informix migrations, credativ GmbH developed a <strong>Foreign Data Wrapper (FDW)<\/strong> for Informix databases. This supports migration, as well as the integration of PostgreSQL<sup>\u00ae<\/sup> into existing Informix installations, to facilitate data exchange and processing. The Informix FDW supports all PostgreSQL<g id=\"gid_2\">\u00ae<\/g> versions with SQL\/MED implementation, i.e., from 9.1 up to the current 9.3. Furthermore, with PostgreSQL<sup>\u00ae<\/sup> 9.3, the Informix FDW also supports write operations on Foreign Tables.   <\/p>\n<h2>Installation<\/h2>\n<p>The installation requires at least an existing IBM CSDK for Informix. The CSDK can be obtained directly via <g id=\"gid_0\">download<\/g>. In the following, we assume that a CSDK installation exists in <em>\/opt\/IBM\/informix<\/em>. The path may vary depending on the installation. The Informix FDW sources can be cloned directly from the credativ GitHub <g id=\"gid_2\">repository<\/g>, or a <g id=\"gid_3\">release tarball<\/g> can be acquired (version 0.2.1 at the time of this article). The following installation description assumes a system with CentOS 6, but can be performed with variations on any other Linux system.     <\/p>\n<div class=\"geshifilter\">\n<pre class=\"text geshifilter-text\">% wget 'https:\/\/github.com\/credativ\/informix_fdw\/archive\/REL0_2_1.tar.gz'\n% tar -xzf REL0_2_1.tar.gz<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>Subsequently, the FDW can be built by specifying the CSDK installation folder:<\/p>\n<div class=\"geshifilter\">\n<pre class=\"text geshifilter-text\">% export INFORMIXDIR=\/opt\/IBM\/informix\n% export PATH=$INFORMIXDIR\/bin:$PATH\n% PG_CONFIG=\/usr\/pgsql-9.3\/bin\/pg_config make<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>In the listing, the environment variable <em>PG_CONFIG <\/em>was explicitly set to the PostgreSQL<sup>\u00ae<\/sup> 9.3 installation. This refers to an installation of PGDG-RPM packages on CentOS 6, where <g id=\"gid_2\">pg_config<\/g> is located outside the standard path. Furthermore, the <g id=\"gid_3\">postgresql93-devel <\/g>package must be installed. If all paths have been set correctly, the FDW can be installed.   <\/p>\n<div class=\"geshifilter\">\n<pre class=\"text geshifilter-text\">% PG_CONFIG=\/usr\/pgsql-9.3\/bin\/pg_config make install<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>This installs all necessary libraries. For these to function correctly and for the required Informix libraries to be found when loading into the PostgreSQL<sup>\u00ae<\/sup> instance, the latter must still be configured in the system&#8217;s dynamic linker. Based on the previously mentioned CentOS 6 platform, this is most easily done via an additional configuration file in <em>\/etc\/ld.so.conf.d <\/em>(this requires root privileges in this case!):  <\/p>\n<div class=\"geshifilter\">\n<pre class=\"text geshifilter-text\">% vim \/etc\/ld.so.conf.d\/informix.conf<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>This file should contain the paths to the required Informix libraries:<\/p>\n<div class=\"geshifilter\">\n<pre class=\"text geshifilter-text\">\/opt\/IBM\/informix\/lib\n\/opt\/IBM\/informix\/lib\/esql<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>Subsequently, the dynamic linker&#8217;s cache must be refreshed:<\/p>\n<div class=\"geshifilter\">\n<pre class=\"text geshifilter-text\">% ldconfig<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>The Informix FDW installation should now be ready for use.<\/p>\n<h2>Configuration<\/h2>\n<p>To use the Informix FDW in a database, the FDW must be loaded into the respective database. The FDW is a so-called <strong>EXTENSION<\/strong>, and these are loaded with the <a href=\"http:\/\/www.postgresql.org\/docs\/9.3\/static\/sql-createextension.html\" target=\"_blank\" rel=\"noopener noreferrer\">CREATE EXTENSION<\/a> command: <\/p>\n<div class=\"geshifilter\">\n<pre class=\"text geshifilter-text\">#= CREATE EXTENSION informix_fdw;\nCREATE EXTENSION<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>To connect an Informix database via the Informix FDW, one first needs a definition of how the external data source should be accessed. For this, a definition is created with the <a href=\"http:\/\/www.postgresql.org\/docs\/9.3\/static\/sql-createserver.html\" target=\"_blank\" rel=\"noopener noreferrer\">CREATE SERVER<\/a> command, containing the information required by the Informix FDW. It should be noted that the options passed to a SERVER directive depend on the respective FDW. For the Informix FDW, at least the following parameters are required:   <\/p>\n<ul>\n<li><em>informixdir<\/em> &#8211; CSDK installation directory<\/li>\n<li><em>informixserver<\/em> &#8211; Name of the server connection configured via the Informix CSDK (see Informix documentation, or <em>$INFORMIXDIR\/etc\/sqlhosts<\/em> for details)<\/li>\n<\/ul>\n<p>The SERVER definition is then created as follows:<\/p>\n<div class=\"geshifilter\">\n<pre class=\"text geshifilter-text\">=# CREATE SERVER centosifx_tcp\n  FOREIGN DATA WRAPPER informix_fdw\n  OPTIONS(informixdir '\/opt\/IBM\/informix',\n  informixserver 'ol_informix1210');<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>The <em>informixserver<\/em> variable is the instance name of the Informix instance; here, one simply needs to follow the specifications of the Informix installation. The next step now creates a so-called <a href=\"http:\/\/www.postgresql.org\/docs\/9.3\/static\/sql-createusermapping.html\" target=\"_blank\" rel=\"noopener noreferrer\">Usermapping<\/a>, with which a PostgreSQL<sup>\u00ae<\/sup> role (or user) is bound to the Informix access data. If this role is logged in to the PostgreSQL<sup>\u00ae<\/sup> server, it automatically uses the specified login information via the Usermapping to log in to the Informix server <em>centosifx_tcp<\/em>.  <\/p>\n<div class=\"geshifilter\">\n<pre class=\"text geshifilter-text\">=# CREATE USER MAPPING FOR bernd\n  SERVER centosifx_tcp\n  OPTIONS(username 'informix',\n  password 'informix')<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>Here too, the parameters specified in the OPTIONS directive depend on the respective FDW. Now, so-called Foreign Tables can be created to integrate Informix tables. In the following example, a simple relation with street names from the Informix server ol_informix1210 is integrated into the PostgreSQL<g id=\"gid_0\">\u00ae<\/g> instance. It is important that the conversions of data types from Informix to PostgreSQL<g id=\"gid_1\">\u00ae<\/g> occur with compatible data types. First, the definition of the Informix table as it was created in the Informix instance:    <\/p>\n<div class=\"geshifilter\">\n<pre class=\"text geshifilter-text\">CREATE TABLE osm_roads(id bigint primary key,\n  name varchar(255),\n  highway varchar(32),\n  area varchar(10));<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>The definition in PostgreSQL<sup>\u00ae<\/sup> should be analogous; if data types cannot be converted, an error will be thrown when creating the Foreign Table. When converting string types such as varchar, it is also important that a corresponding target conversion is defined when creating the Foreign Table. The Informix FDW therefore requires the following parameters when creating a <a href=\"http:\/\/www.postgresql.org\/docs\/9.3\/static\/sql-createforeigntable.html\" target=\"_blank\" rel=\"noopener noreferrer\">Foreign Table<\/a>:   <\/p>\n<ul>\n<li><em>client_locale<\/em> &#8211; Client locale (should be identical to the server encoding of the PostgreSQL<sup>\u00ae<\/sup> instance)<\/li>\n<li><em>db_locale<\/em> &#8211; Database server locale<\/li>\n<li><em>table<\/em> or <em>query<\/em> &#8211; The table or SQL query on which the Foreign Table is based. A Foreign Table based on a query cannot execute modifying SQL operations. <\/li>\n<\/ul>\n<div class=\"geshifilter\">\n<pre class=\"text geshifilter-text\">#= CREATE FOREIGN TABLE osm_roads(id bigint,\n  name varchar(255),\n  highway varchar(32),\n  area varchar(10))\n  SERVER centosifx_tcp\n  OPTIONS(table 'osm_roads',\n  database 'kettle',\n  client_locale 'en_US.utf8',\n  db_locale 'en_US.819');<\/pre>\n<\/div>\n<p>If you are unsure what the default locale of the PostgreSQL <sup>\u00ae<\/sup> database looks like, you can most easily display it via SQL:<\/p>\n<div class=\"geshifilter\">\n<pre class=\"text geshifilter-text\">=# SELECT name, setting FROM pg_settings WHERE name IN ('lc_ctype', 'lc_collate');\n  name | setting  \n------------+------------\n  lc_collate | en_US.utf8\n  lc_ctype | en_US.utf8\n(2 rows)<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>The locale and encoding settings should definitely be chosen to be as consistent as possible. If all settings have been chosen correctly, the data of the <em>osm_roads <\/em>table can be accessed directly via PostgreSQL<sup>\u00ae<\/sup>: <\/p>\n<div class=\"geshifilter\">\n<pre class=\"text geshifilter-text\">=# SELECT id, name FROM osm_roads WHERE name = 'Albert-Einstein-Stra\u00dfe';\n  id | name  \n------+------------------------\n  1002 | Albert-Einstein-Stra\u00dfe\n(1 row)<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>Depending on the number of tuples in the Foreign Table, selection can take a significant amount of time, as with incompatible WHERE clauses, the entire data set must first be transmitted to the PostgreSQL<sup>\u00ae<\/sup> server via a full table scan. However, the Informix FDW supports <em>Predicate Pushdown <\/em>under certain conditions. This refers to the ability to transmit parts of the WHERE condition that concern the Foreign Table to the remote server and apply the filter condition there. This saves the transmission of inherently useless tuples, as they would be filtered out on the PostgreSQL<sup>\u00ae<\/sup> server anyway. The above example looks like this in the execution plan:    <\/p>\n<div class=\"geshifilter\">\n<pre class=\"text geshifilter-text\">#= EXPLAIN (ANALYZE, VERBOSE)\n  SELECT id, name  \n  FROM osm_roads WHERE name = 'Albert-Einstein-Stra\u00dfe';\n  QUERY PLAN  \n-----------------------------------------------------------------------------------------------------------------------------\n  Foreign Scan on public.osm_roads (cost=2925.00..3481.13 rows=55613 width=24) (actual time=85.726..4324.341 rows=1 loops=1)\n  Output: id, name\n  Filter: ((osm_roads.name)::text = 'Albert-Einstein-Stra\u00dfe'::text)\n  Rows Removed by Filter: 55612\n  Informix costs: 2925.00\n  Informix query: SELECT *, rowid FROM osm_roads\n  Total runtime: 4325.351 ms<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>The <em>Filter<\/em> display in this execution plan shows that a total of 55612 tuples were filtered out, and ultimately only a single tuple was returned because it met the filter condition. The problem here lies in the implicit cast that PostgreSQL<sup>\u00ae<\/sup> applies in the WHERE condition to the string column <em>name<\/em>. Current versions of the Informix FDW do not yet account for this. However, predicates can be transmitted to the Foreign Server if they correspond to integer types, for example:    <\/p>\n<div class=\"geshifilter\">\n<pre class=\"text geshifilter-text\">#= EXPLAIN (ANALYZE, VERBOSE) SELECT id, name FROM osm_roads WHERE id = 1002;\n  QUERY PLAN  \n--------------------------------------------------------------------------------------------------------------------------\n  Foreign Scan on public.osm_roads (cost=2925.00..2980.61 rows=5561 width=40) (actual time=15.849..16.410 rows=1 loops=1)\n  Output: id, name\n  Filter: (osm_roads.id = 1002)\n  Informix costs: 2925.00\n  Informix query: SELECT *, rowid FROM osm_roads WHERE (id = 1002)\n  Total runtime: 17.145 ms\n(6 rows)<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<h2>Data Modification<\/h2>\n<p>With PostgreSQL<sup>\u00ae<\/sup> 9.3, the Informix FDW also supports manipulating (UPDATE), deleting (DELETE), and inserting (INSERT) data into the Foreign Table. Furthermore, transactions initiated in the PostgreSQL<g id=\"gid_1\">\u00ae<\/g> client implicitly interact with transactions on the Foreign Server (provided that the Informix database was created with logging and is therefore transactional). The following example demonstrates this capability:  <\/p>\n<p>&nbsp;<\/p>\n<div class=\"geshifilter\">\n<pre class=\"text geshifilter-text\">=# BEGIN;\nBEGIN\n \n*=# INSERT INTO osm_roads(id, name, highway) VALUES(55614, 'Hans-Mustermann-Stra\u00dfe', 'no');\nINSERT 0 1\n \n*=# SAVEPOINT A;\nSAVEPOINT\n \n*=# UPDATE osm_roads SET area = 'Nordrhein-Westfalen' WHERE id = 55614;\nERROR: value too long for type character varying(10)\n \n!=# ROLLBACK TO A;\nROLLBACK\n \n*=# UPDATE osm_roads SET area = 'NRW' WHERE id = 55614;\nUPDATE 1\n \n*=# COMMIT;\nCOMMIT\n \n=# SELECT * FROM osm_roads WHERE id = 55614;\n  id | name | highway | area  \n-------+------------------------+---------+------\n  55614 | Hans-Mustermann-Stra\u00dfe | no | NRW\n(1 row)<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>The example first creates a new record after starting a transaction. Subsequently, a <em>SAVEPOINT<\/em> is set to secure the current state of this transaction. In the next step, the new record is modified because the locality of the new record was forgotten to be specified. However, since only country codes are allowed, this fails due to the excessive length of the new identifier, and the transaction becomes invalid. Via the <em>SAVEPOINT<\/em>, the transaction is rolled back to the last created savepoint, and the Informix FDW also implicitly rolls back to this <em>SAVEPOINT <\/em>on the Foreign Server. Subsequently, the correct country code can be entered within this transaction. After the <em>COMMIT<\/em>, the Informix FDW also confirms the transaction on the Foreign Server, and the record has been correctly entered.      <\/p>\n<h2>Summary<\/h2>\n<p>Foreign Data Wrappers are a very powerful and flexible tool for integrating PostgreSQL<sup>\u00ae<\/sup> into heterogeneous database landscapes. These interfaces are by no means limited to purely relational data sources. Furthermore, with the support of modifying SQL queries (DML), the FDW API also enables the integration of writable data sources into PostgreSQL<sup>\u00ae<\/sup> databases.  <\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>This article was originally written by Bernd Helmle.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Since PostgreSQL\u00ae 9.1, PostgreSQL\u00ae has implemented an interface for accessing external data sources. The interface defined in the SQL Standard (SQL\/MED) allows transparent access to and manipulation of external data sources in the same manner as with PostgreSQL\u00ae-native tables. External data sources appear as tables in the respective database and can be used without restriction [&hellip;]<\/p>\n","protected":false},"author":90,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_improvement_type_select":"improve_an_existing","_thumb_yes_seoaic":false,"_frame_yes_seoaic":false,"seoaic_generate_description":"","seoaic_improve_instructions_prompt":"","seoaic_rollback_content_improvement":"","seoaic_idea_thumbnail_generator":"","thumbnail_generated":false,"thumbnail_generate_prompt":"","seoaic_article_description":"","seoaic_article_subtitles":[],"footnotes":""},"categories":[1708],"tags":[1786,1726,1801],"class_list":["post-9957","post","type-post","status-publish","format-standard","hentry","category-postgresql-en","tag-fdw-en","tag-informix-en","tag-postgresql-en"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.4 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Informix Foreign Data Wrapper for PostgreSQL\u00ae - credativ\u00ae<\/title>\n<meta name=\"description\" content=\"Leverage the benefits of the PostgreSQL Foreign Data Wrapper for Informix to integrate external data sources more transparently.\" \/>\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.credativ.de\/en\/blog\/postgresql-en\/informix-foreign-data-wrapper-for-postgresql\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Informix Foreign Data Wrapper for PostgreSQL\u00ae\" \/>\n<meta property=\"og:description\" content=\"Leverage the benefits of the PostgreSQL Foreign Data Wrapper for Informix to integrate external data sources more transparently.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/informix-foreign-data-wrapper-for-postgresql\/\" \/>\n<meta property=\"og:site_name\" content=\"credativ\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/credativDE\/\" \/>\n<meta property=\"article:published_time\" content=\"2014-08-05T08:00:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.credativ.de\/wp-content\/uploads\/2019\/07\/Portfolio-Loesungen.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"550\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"credativ Redaktion\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@credativde\" \/>\n<meta name=\"twitter:site\" content=\"@credativde\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"credativ Editorial Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/informix-foreign-data-wrapper-for-postgresql\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/informix-foreign-data-wrapper-for-postgresql\\\/\"},\"author\":{\"name\":\"credativ Redaktion\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#\\\/schema\\\/person\\\/63430ac9e022ccceba0f8d53ffe6db12\"},\"headline\":\"Informix Foreign Data Wrapper for PostgreSQL\u00ae\",\"datePublished\":\"2014-08-05T08:00:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/informix-foreign-data-wrapper-for-postgresql\\\/\"},\"wordCount\":1359,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#organization\"},\"keywords\":[\"FDW\",\"Informix\",\"PostgreSQL\u00ae\"],\"articleSection\":[\"PostgreSQL\u00ae\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/informix-foreign-data-wrapper-for-postgresql\\\/#respond\"]}],\"copyrightYear\":\"2014\",\"copyrightHolder\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/informix-foreign-data-wrapper-for-postgresql\\\/\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/informix-foreign-data-wrapper-for-postgresql\\\/\",\"name\":\"Informix Foreign Data Wrapper for PostgreSQL\u00ae - credativ\u00ae\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#website\"},\"datePublished\":\"2014-08-05T08:00:12+00:00\",\"description\":\"Leverage the benefits of the PostgreSQL Foreign Data Wrapper for Informix to integrate external data sources more transparently.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/informix-foreign-data-wrapper-for-postgresql\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/informix-foreign-data-wrapper-for-postgresql\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/informix-foreign-data-wrapper-for-postgresql\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Informix Foreign Data Wrapper for PostgreSQL\u00ae\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/\",\"name\":\"credativ GmbH\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Organization\",\"Place\"],\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#organization\",\"name\":\"credativ\u00ae\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/\",\"logo\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/informix-foreign-data-wrapper-for-postgresql\\\/#local-main-organization-logo\"},\"image\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/informix-foreign-data-wrapper-for-postgresql\\\/#local-main-organization-logo\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/credativDE\\\/\",\"https:\\\/\\\/x.com\\\/credativde\",\"https:\\\/\\\/mastodon.social\\\/@credativde\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/credativ-gmbh\",\"https:\\\/\\\/www.instagram.com\\\/credativ\\\/\"],\"description\":\"Die credativ GmbH ist ein f\u00fchrendes, auf Open Source Software spezialisiertes IT-Dienstleistungs- und Beratungsunternehmen. Wir bieten umfassende und professionelle Services, von Beratung und Infrastruktur-Betrieb \u00fcber 24\\\/7 Support bis hin zu individuellen L\u00f6sungen und Schulungen. Unser Fokus liegt auf dem ganzheitlichen Management von gesch\u00e4ftskritischen Open-Source-Systemen, darunter Betriebssysteme (z.B. Linux), Datenbanken (z.B. PostgreSQL), Konfigurationsmanagement (z.B. Ansible, Puppet) und Virtualisierung. Als engagierter Teil der Open-Source-Community unterst\u00fctzen wir unsere Kunden dabei, die Vorteile freier Software sicher, stabil und effizient in ihrer IT-Umgebung zu nutzen.\",\"legalName\":\"credativ GmbH\",\"foundingDate\":\"2025-03-01\",\"duns\":\"316387060\",\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"minValue\":\"11\",\"maxValue\":\"50\"},\"address\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/informix-foreign-data-wrapper-for-postgresql\\\/#local-main-place-address\"},\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":\"51.1732374\",\"longitude\":\"6.392010099999999\"},\"telephone\":[\"+4921619174200\",\"08002733284\"],\"contactPoint\":{\"@type\":\"ContactPoint\",\"telephone\":\"08002733284\",\"email\":\"vertrieb@credativ.de\"},\"openingHoursSpecification\":[{\"@type\":\"OpeningHoursSpecification\",\"dayOfWeek\":[\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\"],\"opens\":\"09:00\",\"closes\":\"17:00\"},{\"@type\":\"OpeningHoursSpecification\",\"dayOfWeek\":[\"Saturday\",\"Sunday\"],\"opens\":\"00:00\",\"closes\":\"00:00\"}],\"email\":\"info@credativ.de\",\"areaServed\":\"D-A-CH\",\"vatID\":\"DE452151696\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#\\\/schema\\\/person\\\/63430ac9e022ccceba0f8d53ffe6db12\",\"name\":\"credativ Redaktion\",\"description\":\"Dieser Account dient als Sammelpunkt f\u00fcr die wertvollen Beitr\u00e4ge ehemaliger Mitarbeiter von credativ. Wir bedanken uns f\u00fcr ihre gro\u00dfartigen Inhalte, die das technische Wissen in unserem Blog \u00fcber die Jahre hinweg bereichert haben. Ihre Artikel bleiben hier weiterhin f\u00fcr unsere Leser zug\u00e4nglich.\"},{\"@type\":\"PostalAddress\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/informix-foreign-data-wrapper-for-postgresql\\\/#local-main-place-address\",\"streetAddress\":\"Hennes-Weisweiler-Allee 23\",\"addressLocality\":\"M\u00f6nchengladbach\",\"postalCode\":\"41179\",\"addressRegion\":\"Deutschland\",\"addressCountry\":\"DE\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/informix-foreign-data-wrapper-for-postgresql\\\/#local-main-organization-logo\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/credativ-logo-right.svg\",\"contentUrl\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/credativ-logo-right.svg\",\"caption\":\"credativ\u00ae\"}]}<\/script>\n<meta name=\"geo.placename\" content=\"M\u00f6nchengladbach\" \/>\n<meta name=\"geo.position\" content=\"51.1732374;6.392010099999999\" \/>\n<meta name=\"geo.region\" content=\"Germany\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Informix Foreign Data Wrapper for PostgreSQL\u00ae - credativ\u00ae","description":"Leverage the benefits of the PostgreSQL Foreign Data Wrapper for Informix to integrate external data sources more transparently.","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.credativ.de\/en\/blog\/postgresql-en\/informix-foreign-data-wrapper-for-postgresql\/","og_locale":"en_US","og_type":"article","og_title":"Informix Foreign Data Wrapper for PostgreSQL\u00ae","og_description":"Leverage the benefits of the PostgreSQL Foreign Data Wrapper for Informix to integrate external data sources more transparently.","og_url":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/informix-foreign-data-wrapper-for-postgresql\/","og_site_name":"credativ\u00ae","article_publisher":"https:\/\/www.facebook.com\/credativDE\/","article_published_time":"2014-08-05T08:00:12+00:00","og_image":[{"width":800,"height":550,"url":"https:\/\/www.credativ.de\/wp-content\/uploads\/2019\/07\/Portfolio-Loesungen.jpg","type":"image\/jpeg"}],"author":"credativ Redaktion","twitter_card":"summary_large_image","twitter_creator":"@credativde","twitter_site":"@credativde","twitter_misc":{"Written by":"credativ Editorial Team","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/informix-foreign-data-wrapper-for-postgresql\/#article","isPartOf":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/informix-foreign-data-wrapper-for-postgresql\/"},"author":{"name":"credativ Redaktion","@id":"https:\/\/www.credativ.de\/en\/#\/schema\/person\/63430ac9e022ccceba0f8d53ffe6db12"},"headline":"Informix Foreign Data Wrapper for PostgreSQL\u00ae","datePublished":"2014-08-05T08:00:12+00:00","mainEntityOfPage":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/informix-foreign-data-wrapper-for-postgresql\/"},"wordCount":1359,"commentCount":0,"publisher":{"@id":"https:\/\/www.credativ.de\/en\/#organization"},"keywords":["FDW","Informix","PostgreSQL\u00ae"],"articleSection":["PostgreSQL\u00ae"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/informix-foreign-data-wrapper-for-postgresql\/#respond"]}],"copyrightYear":"2014","copyrightHolder":{"@id":"https:\/\/www.credativ.de\/#organization"}},{"@type":"WebPage","@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/informix-foreign-data-wrapper-for-postgresql\/","url":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/informix-foreign-data-wrapper-for-postgresql\/","name":"Informix Foreign Data Wrapper for PostgreSQL\u00ae - credativ\u00ae","isPartOf":{"@id":"https:\/\/www.credativ.de\/en\/#website"},"datePublished":"2014-08-05T08:00:12+00:00","description":"Leverage the benefits of the PostgreSQL Foreign Data Wrapper for Informix to integrate external data sources more transparently.","breadcrumb":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/informix-foreign-data-wrapper-for-postgresql\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/informix-foreign-data-wrapper-for-postgresql\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/informix-foreign-data-wrapper-for-postgresql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.credativ.de\/en\/"},{"@type":"ListItem","position":2,"name":"Informix Foreign Data Wrapper for PostgreSQL\u00ae"}]},{"@type":"WebSite","@id":"https:\/\/www.credativ.de\/en\/#website","url":"https:\/\/www.credativ.de\/en\/","name":"credativ GmbH","description":"","publisher":{"@id":"https:\/\/www.credativ.de\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.credativ.de\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Organization","Place"],"@id":"https:\/\/www.credativ.de\/en\/#organization","name":"credativ\u00ae","url":"https:\/\/www.credativ.de\/en\/","logo":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/informix-foreign-data-wrapper-for-postgresql\/#local-main-organization-logo"},"image":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/informix-foreign-data-wrapper-for-postgresql\/#local-main-organization-logo"},"sameAs":["https:\/\/www.facebook.com\/credativDE\/","https:\/\/x.com\/credativde","https:\/\/mastodon.social\/@credativde","https:\/\/www.linkedin.com\/company\/credativ-gmbh","https:\/\/www.instagram.com\/credativ\/"],"description":"Die credativ GmbH ist ein f\u00fchrendes, auf Open Source Software spezialisiertes IT-Dienstleistungs- und Beratungsunternehmen. Wir bieten umfassende und professionelle Services, von Beratung und Infrastruktur-Betrieb \u00fcber 24\/7 Support bis hin zu individuellen L\u00f6sungen und Schulungen. Unser Fokus liegt auf dem ganzheitlichen Management von gesch\u00e4ftskritischen Open-Source-Systemen, darunter Betriebssysteme (z.B. Linux), Datenbanken (z.B. PostgreSQL), Konfigurationsmanagement (z.B. Ansible, Puppet) und Virtualisierung. Als engagierter Teil der Open-Source-Community unterst\u00fctzen wir unsere Kunden dabei, die Vorteile freier Software sicher, stabil und effizient in ihrer IT-Umgebung zu nutzen.","legalName":"credativ GmbH","foundingDate":"2025-03-01","duns":"316387060","numberOfEmployees":{"@type":"QuantitativeValue","minValue":"11","maxValue":"50"},"address":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/informix-foreign-data-wrapper-for-postgresql\/#local-main-place-address"},"geo":{"@type":"GeoCoordinates","latitude":"51.1732374","longitude":"6.392010099999999"},"telephone":["+4921619174200","08002733284"],"contactPoint":{"@type":"ContactPoint","telephone":"08002733284","email":"vertrieb@credativ.de"},"openingHoursSpecification":[{"@type":"OpeningHoursSpecification","dayOfWeek":["Monday","Tuesday","Wednesday","Thursday","Friday"],"opens":"09:00","closes":"17:00"},{"@type":"OpeningHoursSpecification","dayOfWeek":["Saturday","Sunday"],"opens":"00:00","closes":"00:00"}],"email":"info@credativ.de","areaServed":"D-A-CH","vatID":"DE452151696"},{"@type":"Person","@id":"https:\/\/www.credativ.de\/en\/#\/schema\/person\/63430ac9e022ccceba0f8d53ffe6db12","name":"credativ Redaktion","description":"Dieser Account dient als Sammelpunkt f\u00fcr die wertvollen Beitr\u00e4ge ehemaliger Mitarbeiter von credativ. Wir bedanken uns f\u00fcr ihre gro\u00dfartigen Inhalte, die das technische Wissen in unserem Blog \u00fcber die Jahre hinweg bereichert haben. Ihre Artikel bleiben hier weiterhin f\u00fcr unsere Leser zug\u00e4nglich."},{"@type":"PostalAddress","@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/informix-foreign-data-wrapper-for-postgresql\/#local-main-place-address","streetAddress":"Hennes-Weisweiler-Allee 23","addressLocality":"M\u00f6nchengladbach","postalCode":"41179","addressRegion":"Deutschland","addressCountry":"DE"},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/informix-foreign-data-wrapper-for-postgresql\/#local-main-organization-logo","url":"https:\/\/www.credativ.de\/wp-content\/uploads\/2025\/04\/credativ-logo-right.svg","contentUrl":"https:\/\/www.credativ.de\/wp-content\/uploads\/2025\/04\/credativ-logo-right.svg","caption":"credativ\u00ae"}]},"geo.placename":"M\u00f6nchengladbach","geo.position":{"lat":"51.1732374","long":"6.392010099999999"},"geo.region":"Germany"},"_links":{"self":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/posts\/9957","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/users\/90"}],"replies":[{"embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/comments?post=9957"}],"version-history":[{"count":0,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/posts\/9957\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/media?parent=9957"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/categories?post=9957"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/tags?post=9957"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}