Postgresql

在 PostgreSQL 的外部數據包裝器中命名列的方式與其原始列不同

  • March 6, 2017

我有兩個數據庫。在每個數據庫中,我都有一個employee表,其列數和列名彼此不同。

這是表在第一個數據庫中的樣子:

Emp_ID    Name        Father_Name      Family_Name     
1         Max         Stjepan          Neg               
2         John        Chris            James           

這是第二個數據庫中的第二個表的樣子:

ID        Name        Father_Name      Family_Name   Blood_Type
1         Max         Stjepan          Neg           ARH+
2         John        Chris            James         ORH-

現在,在Second Database中創建外部表時,我想使用列名 ID 儲存First DatabaseEmp_ID中的值,並且我希望我的外部表包含目前數據庫Second Database中表中的血型。

簡而言之,如何創建一個列名與遠端數據庫中的原始表不同的外部表?它還應該包括目前數據庫中第一個表中的列。

您可以隨意命名外部表的列。例如,在一個之後IMPORT FOREIGN SCHEMA ...你可以做

ALTER FOREIGN TABLE myschema.mytable RENAME a_column TO another_column;

(對於CREATE FOREIGN TABLE,您必須在OPTIONS子句中為列指定不同的列名CREATE FOREIGN TABLE foreign.employee (emp_id integer OPTIONS (column_name 'id'), ...:)

不能做的是混合本地表和外部表中的列。要實現類似的效果,您可以創建一個視圖:

CREATE VIEW unified_employee AS
SELECT local.id AS emp_id,
      local.name,
      ...,
      foreign.blood_type
 FROM local_schema.employee AS local
 JOIN foreign_schema.employee AS foreign ON local.id = foreign.emp_id;

我故意交換了這個例子中的表格。您的範例表沒有足夠的差異,因此在本地employee表上的簡單視圖(該id列被命名)emp_id就可以解決問題,而無需觸及其他數據庫。

引用自:https://dba.stackexchange.com/questions/166307