【发布时间】:2021-08-15 11:12:18
【问题描述】:
我在 PostgreSQL 数据库中有几个表和两个函数。
我将 SQL Server 数据库迁移到 PostgreSQL 数据库。
现在,我想创建一个从多个表中获取数据的视图。
这在 SQL Server 中可以正常工作,但在 PostgreSQL 中却不行,因为它具有不同的架构和语法。
有谁知道如何在 PostgreSQL 中创建视图?
如何将 SQL Server 视图转换为 PostgreSQL?
我是 PostgreSQL 新手,对它了解不多。
所以,这是我的"payment_status" 查看代码
ALTER VIEW "PAYMENT_STATUS" AS
SELECT dbo.PAYMENTS.ID, dbo.PAYMENTS.ACADEMIC_YEAR, dbo.PAYMENTS.BRANCH, dbo.PAYMENTS.MEMBER_ID, dbo.STUDENTS.FULL_NAME, dbo.STUDENTS.MOBILE, dbo.STUDENTS.EMAIL, dbo.PAYMENTS.STD,
dbo.PAYMENTS.FEE_TYPE, dbo.PAYMENTS.INSTALLMENT, dbo.PAYMENTS.AMOUNT, dbo.PAYMENTS.LATE_FEE_RATE, dbo.PAYMENTS.LATE_FEE_LIMIT, dbo.PAYMENTS.START_DATE, dbo.PAYMENTS.DUE_DATE,
dbo.PAYMENTS.EXPIRY_DATE, dbo.PAYMENTS.REMARKS, ISNULL(TRANSACTIONS.ID, - 1) AS TXID, ISNULL(TRANSACTIONS.TXN_ID, '') AS TXN_ID, ISNULL(TRANSACTIONS.TXN_DATE, '') AS TXN_DATE,
ISNULL(TRANSACTIONS.TOTAL_AMOUNT, dbo.PAYMENTS.AMOUNT + dbo.CalcDue(dbo.PAYMENTS.DUE_DATE, dbo.PAYMENTS.LATE_FEE_RATE, dbo.PAYMENTS.LATE_FEE_LIMIT)) AS TOTAL_AMOUNT,
ISNULL(TRANSACTIONS.TOTAL_LATE_FEE_AMOUNT, dbo.CalcDue(dbo.PAYMENTS.DUE_DATE, dbo.PAYMENTS.LATE_FEE_RATE, dbo.PAYMENTS.LATE_FEE_LIMIT)) AS TOTAL_LATE_FEE_AMOUNT,
ISNULL(TRANSACTIONS.PAYMENT_MODE, '') AS PAYMENT_MODE, ISNULL(TRANSACTIONS.REF_NO, '') AS REF_NO, ISNULL(TRANSACTIONS.REF_DETAILS, '') AS REF_DETAILS,
ISNULL(TRANSACTIONS.TECH_RESPONSE_F1, '') AS TECH_RESPONSE_F1, ISNULL(TRANSACTIONS.TECH_RESPONSE_F2, '') AS TECH_RESPONSE_F2, ISNULL(TRANSACTIONS.REMARKS, '') AS TX_REMARKS,
ISNULL(TRANSACTIONS.STATUS, 'DUE') AS STATUS, ISNULL(TRANSACTIONS.FINANCIAL_INSTITUTE, '') AS FINANCIAL_INSTITUTE, ISNULL(TRANSACTIONS.CREATED_BY, dbo.PAYMENTS.CREATED_BY)
AS TX_CREATED_BY, ISNULL(TRANSACTIONS.CREATED_ON, dbo.PAYMENTS.CREATED_ON) AS TX_CREATED_ON, ISNULL(TRANSACTIONS.MODIFIED_BY, dbo.PAYMENTS.MODIFIED_BY) AS TX_MODIFIED_BY,
ISNULL(TRANSACTIONS.MODIFIED_ON, dbo.PAYMENTS.MODIFIED_ON) AS TX_MODIFIED_ON, dbo.PAYMENTS.CREATED_BY, dbo.PAYMENTS.CREATED_ON, dbo.PAYMENTS.MODIFIED_BY,
dbo.PAYMENTS.MODIFIED_ON , ISNULL(TRANSACTIONS.ERPStatus, '') AS TX_ERPStatus
FROM dbo.PAYMENTS INNER JOIN
dbo.STUDENTS ON dbo.PAYMENTS.MEMBER_ID = dbo.STUDENTS.MEMBER_ID LEFT OUTER JOIN
(SELECT * FROM dbo.TRANSACTIONS WHERE STATUS!='REVERSED') AS TRANSACTIONS ON dbo.PAYMENTS.ID = TRANSACTIONS.PAYMENT_ID ;
【问题讨论】:
-
使用
create view创建视图 -
SQL 表示 ms sql server
-
"但在 PostgreSQL 中不起作用,因为有不同的模式" 你为什么认为我们知道你使用的模式名称?您可以在 PostgreSQL 中创建一个模式“dbo”并将其用于所有表。
标签: sql postgresql database-migration sql-view