Могу ли я использовать postgres_fdw без определенных сторонних таблиц?

У меня есть производственная база данных «PRODdb1» с учетной записью только для чтения. Мне нужно запросить (выбрать оператор) эту базу данных и вставить данные во вторичную базу данных с именем «RPTdb1». Изначально я планировал просто создать временную таблицу в PRODdb1 по моему выбору, но проблема в разрешениях.

Я читал о dblink и postgres_fdw, но есть ли одно из этих решений для моей проблемы? Я бы не стал создавать сторонние таблицы, потому что мой SELECT объединяет многие таблицы из PRODdb1, поэтому мне неизвестно, будет ли postgres_fdw по-прежнему вариантом для моего варианта использования.

Другим вариантом может быть любое средство получения результатов SELECT в файл .CSV или что-то в этом роде. Мое главное препятствие здесь в том, что у меня есть только пользователь для чтения, с которым я могу работать, но никакого способа обойти эту проблему.


person calKno    schedule 27.08.2018    source источник
comment
Этот вопрос может быть более уместным на DBA Stack Exchange.   -  person Basil Bourque    schedule 27.08.2018


Ответы (1)


Простой ответ - нет. Вы не можете использовать postgres_fdw без определения сторонней таблицы в вашем RPTdb1. Однако это не должно быть большой проблемой, поскольку создать сторонние таблицы довольно просто.

Я нахожусь в той же лодке, что и вы. Мы используем сторонний продукт (на основе Postgres 9.3) для нашей производственной базы данных, и наши пользовательские роли очень ограничены (т.е. доступ только для чтения, без репликации, без возможности создавать триггеры / функции / таблицы / и т. Д.).

Я считаю, что postgres_fdw обладает той функциональностью, которую вы ищете, с одной оговоркой. На вашем локальном сервере отчетов должен быть установлен PostgreSQL версии 10 (или как минимум 9.6). В настоящее время мы используем 9.3 на нашем локальном сервере, и хотя простые запросы работают прекрасно, все более сложные занимает вечность, потому что FDW в 9.3 пытается извлечь все данные в таблице, прежде чем он сможет выполнять JOINs или даже использовать инструкцию WHERE.

версия 9.6: перед возвратом результатов подталкивает JOIN к удаленной базе данных.

версия 10: отправляет агрегаты, такие как COUNT и SUM, в удаленную базу данных перед возвратом результатов.

(Я не уверен, какая версия добавляет возможность передавать операторы WHERE в удаленную БД, но я знаю, что в 9.5 это было невозможно).

На этой неделе мы находимся в процессе обновления нашего локального сервера до версии 10. Я могу держать вас в курсе нашего прогресса, не стесняйтесь делать то же самое.

person David Beckman    schedule 31.10.2018