有一个更高的版本,其中我们创建了一个外表,并在选项字段中,我们的权利“表”,而不是“表名”?
在我的工作中,我们有一个旧的oracle数据库,里面都是字母数字信息。为了将字母数字信息与几何信息连接起来,公司在一些Oracle表的PostgresSQl中创建了当时的外来表,它工作得很好。
现在我们尝试为qgis创建一个插件,它将进行一些几何分析,并使用PostgresSQl的一个外来表将字母数字数据插入Oracle数据库中。问题来了。我们无法处理远程(Oracle)表中的序列ID。
在我的远程机器中,我通过创建包含除id之外的所有列的外表来解决这个问题!因此,当我执行插入操作时,我省略了id字段,远程列中的序列正常工作。
然而,在PostgreSQL的工作中,外表有奇怪的行为,如果我省略了id所有列左移:(!我们尝试其他方法之一,我们做一些像选项(表(选择字段1,字段2)),但我省略了id字段在插入,并发生错误说,我试图写一个空值在id字段和它的不允许--'.我真的认为是因为版本的pwd扩展或什么.
下面是如何创建表的示例:工作对外表:
CREATE FOREIGN TABLE si.tbl_accaofiscal(
idaccaofiscal numeric OPTIONS (key 'true') NOT NULL, (this is the problem field)
identidadepredial numeric NOT NULL,
idreparticaofinancas numeric NOT NULL,
idtpaccaofiscal numeric NOT NULL,
descricao character varying(255) NULL COLLATE pg_catalog."default",
)
SERVER oracle_si
OPTIONS (schema 'SI_As', table 'TBL_ACCAOFISCAL');
远程Foreing表:
CREATE FOREIGN TABLE si.tbl_accaofiscal(
idaccaofiscal numeric OPTIONS (key 'true') NOT NULL, (i omit this value and everything works properly)
identidadepredial numeric NOT NULL,
idreparticaofinancas numeric NOT NULL,
idtpaccaofiscal numeric NOT NULL,
descricao character varying(255) NULL COLLATE pg_catalog."default",
)
SERVER oracle_si
OPTIONS (schema_name 'SI_As', table_name 'TBL_ACCAOFISCAL');
正如您所看到的,区别在于Options字段,在我的localhost中,此字段既不接受“scheme”也不接受“table”。
1条答案
按热度按时间gab6jxml1#
与postgres_fdw不同,oracle_fdw不是按名称匹配列,而是按位置匹配列。因此,外表的第一列将Map到Oracle表的第一列,而不管名称如何。
因此,不能对oracle_fdw使用该技巧。一种选择是 * 在Oracle端 * 创建一个没有主键列的视图,并插入到该视图中。