【问题标题】:Create a foreign table pointing to a view in Postgres在 Postgres 中创建一个指向视图的外部表
【发布时间】:2014-05-16 15:07:08
【问题描述】:

是否可以使用 Postgres Foreign Data Wrapper 创建一个指向视图而不是表的外部表?

【问题讨论】:

    标签: postgresql postgres-fdw


    【解决方案1】:

    是的,有可能!

    以下查询完美运行:

    CREATE FOREIGN TABLE facts(name character varying(255))
    SERVER my_server 
    OPTIONS (table_name 'facts');
    

    其中factsmy_server 中的视图而不是表格。

    【讨论】:

    • AFAIK 如果table_name 选项与外部表的名称相同,则不必指定它。
    • 如果使用IMPORT FOREIGN SCHEMA,也不必指定表定义,但必须在LIMIT TO 子句中显式包含视图。
    【解决方案2】:

    最近我不得不做同样的事情,以下是对我有用的步骤。所有这些命令都在本地 postgreSQL DB 上运行。

    CREATE EXTENSION postgres_fdw;
    CREATE SERVER remote_server_name
      FOREIGN DATA WRAPPER postgres_fdw
      OPTIONS (host '10.10.10.10', port '5432', dbname 'remote_db_name');
    
    CREATE USER MAPPING FOR local_user_name
      SERVER remote_server_name
      OPTIONS (user 'remote_user', password 'remote_password');
    
    CREATE FOREIGN TABLE local_table_name (
      id NUMERIC NOT NULL,
      row TEXT,
      another_row INTEGER,
      whatever_row TEXT
    )
      SERVER remote_server_name
      OPTIONS (schema_name 'public', table_name 'remote_table_name');
    

    【讨论】:

      【解决方案3】:

      我也有同样的问题。 在 postgresql-11 的 pgadmin4 中,如果使用 GUI 命令:创建 -> 外部表... 在桌子上,它可以工作;但在视图中,它不起作用,你会得到一个空表。

      为了查看,我使用此代码,它有效:

      IMPORT FOREIGN SCHEMA remote_schema_name
      LIMIT TO (remote_view_name)
      FROM SERVER remote_host_map_name INTO local_shema_name;
      

      原因是,对于表,pgadmin4 可以在构造 SQL 语句中创建与远程表相同的列,但对于视图,它在构造 SQL 语句中不创建列。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 2013-04-24
        • 2013-01-15
        • 1970-01-01
        • 2022-01-23
        相关资源
        最近更新 更多