FDW для MongoDB

1. Подготовка среды Mongo

Среда MongoDB:

Host: 127.0.0.1
Port: 5888
User: mongo_user
Database: mongo_pass

2. Создание FDW в YMatrix

Войдите в YMatrix и используйте mongo_fdw для подключения к MongoDB:

Библиотека клиента MongoDB должна быть установлена на всех хостах кластера.

Сначала создайте расширение mongo_fdw:

mxadmin=# CREATE EXTENSION mongo_fdw;
CREATE EXTENSION

Создайте определение сервера для MongoDB:

mxadmin=# CREATE SERVER mongo_server FOREIGN DATA WRAPPER mongo_fdw OPTIONS (address '127.0.0.1', port '5888');
CREATE SERVER

Создайте отображение пользователя:

mxadmin=# CREATE USER MAPPING FOR postgres
    SERVER mongo_server
    OPTIONS (username 'mongo_user', password 'mongo_pass');
CREATE USER MAPPING

Создайте внешнюю таблицу:

mxadmin=# CREATE FOREIGN TABLE warehouse
    (
        _id name,
        warehouse_id int,
        warehouse_name text,
        warehouse_created timestamptz
    )
    SERVER mongo_server
    OPTIONS (database 'db', collection 'warehouse');
CREATE FOREIGN TABLE

3. Чтение и запись данных с использованием mongo_fdw

После успешного создания внешней таблицы вы можете напрямую запрашивать и изменять данные в коллекции MongoDB warehouse через внешнюю таблицу.

3.1 Запрос данных

Запрос данных из MongoDB:

db.warehouse.find
(
    {
        "warehouse_id" : 1
    }
).pretty()
{
    "_id" : ObjectId("53720b1904864dc1f5a571a0"),
    "warehouse_id" : 1,
    "warehouse_name" : "UPS",
    "warehouse_created" : ISODate("2014-12-12T07:12:10Z")
}

Запрос тех же данных с использованием mongo_fdw в YMatrix:

mxadmin=# SELECT * FROM warehouse WHERE warehouse_id = 1;
           _id            | warehouse_id | warehouse_name |     warehouse_created
--------------------------+--------------+----------------+---------------------------
 53720b1904864dc1f5a571a0 |            1 | UPS            | 2014-12-12 12:42:10+05:30
(1 row)

3.2 Вставка данных

Вставка данных во внешнюю таблицу:

mxadmin=# INSERT INTO warehouse VALUES (0, 2, 'Laptop', '2015-11-11T08:13:10Z');
INSERT 0 1