Как создать ссылки на БД в Postgres для виртуальных столбцов в таблице? - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть Oracle Oracle Query, который использует dblink,

SELECT * FROM  SSP2_PCAT.PRODUCT_TYPES WHERE ( PRODUCT_TYPE) IN 
(SELECT PRODUCT_TYPE FROM SSP2_PCAT.PRODUCT_TYPES
MINUS
SELECT PRODUCT_TYPE FROM SSP2_PCAT.PRODUCT_TYPES@FPORDDEV);

Теперь я преобразовал его в Postgres, используя dblink следующим образом,

SELECT * FROM  SSP2_PCAT.PRODUCT_TYPES WHERE (PRODUCT_TYPE) IN 
(SELECT PRODUCT_TYPE FROM SSP2_PCAT.PRODUCT_TYPES
EXCEPT 
SELECT * from dblink 
('dbname=NTE5OFF port=5432 host=xxxxx 
  user=yyyyy password=zzzzz','SELECT PRODUCT_TYPE FROM 
  SSP2_PCAT.PRODUCT_TYPES')
as t (PRODUCT_TYPE character varying(60)) );

Теперь это работает абсолютноОтлично!

Теперь, как я могу преобразовать приведенный ниже SQL sql с виртуальным столбцом, как показано ниже,

SELECT 'ITO' FRM, SALES_CD, SALES_CODE_DESC, ACTIVE_IND
FROM SSP2_PCAT.ACCT_LVL_SALES_CDS
EXCEPT 
SELECT 'ITO' FRM, SALES_CD, SALES_CODE_DESC, ACTIVE_IND
FROM SSP2_PCAT.ACCT_LVL_SALES_CDS@FPORDDEV;

Я попробовал код в Postgres следующим образом, но, очевидно, выдает ошибкувиртуальная колонка,

SELECT 'ITO' FRM, SALES_CD, SALES_CODE_DESC, ACTIVE_IND FROM 
SSP2_PCAT.ACCT_LVL_SALES_CDS
EXCEPT 
SELECT * FROM dblink 
('dbname=NTE5OFF port=5432 host=xxxxx 
user=yyyyy password=zzzzz', 
'SELECT FRM, SALES_CD, SALES_CODE_DESC, ACTIVE_IND FROM 
SSP2_PCAT.ACCT_LVL_SALES_CDS')
as t ( FRM varchar,
   sales_cd character varying(15),
       sales_code_desc character varying(150),
       active_ind character varying(3) ) );

Может кто-нибудь, пожалуйста, дайте мне знать, если я что-то здесь упускаю?

1 Ответ

0 голосов
/ 12 февраля 2019

В запросе dblink вам нужно будет

SELECT 'ITO' FRM ...

, но, поскольку он находится в строке, вам придется удваивать одинарные кавычки, чтобы избежать их:

'SELECT ''ITO'' FRM ...'

Но было бы намного проще использовать сторонние таблицы с postgres_fdw.

...