我正在通过fdw_postgres访问不同数据库的数据。它运作良好:
CREATE FOREIGN TABLE fdw_table
(
name TEXT,
area double precision,
use TEXT,
geom GEOMETRY
)
SERVER foreign_db
OPTIONS (schema_name 'schema_A', table_name 'table_B')
Run Code Online (Sandbox Code Playgroud)
但是,当我查询data_typefdw_table 的时,我得到以下结果:
name text
area double precision
use text
geom USER-DEFINED
fdw_postgres不能处理PostGIS的GEOMETRY数据类型吗?在这种情况下,用户定义是什么意思?
我有两个数据库,我希望能够在它们之间传输数据,因此我想将一个大型模式从一个数据库导入到另一个数据库,其中有枚举的分配。因此,我遇到了此处描述的问题SQL: errorwhencreateaforeigntablethathasanenumcolumn。
所以我想像“pg_dump enum”这样的东西来获取枚举并将它们传输到另一个数据库。但我不能发出这样的命令。你能帮助我吗 ?
有人可以帮我理解如何设置postgresql的mysql_fdw吗?我在看https://github.com/EnterpriseDB/mysql_fdw,我不知道第一步是什么.
我的问题是我正在使用 PostgreSQL 数据库并想导入一个vfm从其他数据库命名的表,比如B. 但是在我当前的数据库 ( A)中有一个同名 table 的表。我在查询中遇到错误,说关系已经存在。
我想知道是否有办法将外部模式导入具有其他名称的表中,或者(最好)我们是否可以直接查询其他数据库而无需将外部模式导入 PostgreSQL?
我一直无法为此找到完美的解决方案。
database postgresql foreign-data-wrapper postgres-fdw postgresql-9.4
使用 PostgreSQL 10.10,来自超级用户postgres:
CREATE EXTENSION postgres_fdw;
GRANT USAGE ON FOREIGN DATA WRAPPER postgres_fdw TO my_user;
Run Code Online (Sandbox Code Playgroud)
然后在执行以下操作时my_user:
CREATE SERVER my_server
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (...);
Run Code Online (Sandbox Code Playgroud)
显示此错误消息:
Query 1 ERROR: ERROR: foreign-data wrapper "postgres_fdw" does not exist
Run Code Online (Sandbox Code Playgroud)
以下是当前活动的外部数据包装器的列表(来自 psql):
postgres=# \dew
List of foreign-data wrappers
Name | Owner | Handler | Validator
--------------+----------+----------------------+------------------------
postgres_fdw | postgres | postgres_fdw_handler | postgres_fdw_validator
(1 row)
Run Code Online (Sandbox Code Playgroud)
为什么即使在被授予之后USAGE,用户my_user仍然无法看到/使用 postgres_fdw 外部数据包装器,就好像后者不存在一样?还需要采取更多步骤吗?
这个问题与前面的问题有关:为什么从关系数据库中不支持的存储过程中进行选择?
在SQL Server,则无法执行连接(或从选择)存储过程(请注意:一个存储过程是从一个完全不同的功能(在SQL Server术语表值函数) -一个功能,你知道列在设计时返回,但是使用一个过程,直到运行时才知道要返回的特定列).
对于SQL Server,确实存在"DBA通常不允许"的方法,可以实现这样的连接:OPENROWSET
所以问题是:
PostgreSQL可以在两个程序之间执行连接,直到运行时才能知道这些列吗?
它可以做同样的事情,除了使用驻留在外部第三方数据库中的存储过程(可能通过外部数据包装器或其他一些机制)?