云数据库 PostgreSQL 暂不完整支持 T-SQL,但是你可以使用 PostgreSQL 命令来执行通常由这些命令处理的大多任务。例如,你经常使用云数据库 PostgreSQL 不支持的特定 T-SQL 命令。在这种情况下,你可以通过连接到 PostgreSQL 端口并改用 PostgreSQL 命令。更多信息,请参见 PostgreSQL 文档中的 SQL 命令。
注意:后续关于云数据库 PostgreSQL 的 SQL Server 兼容版本统一简称为 MSSQL 兼容版。
一、架构说明
MSSQL 兼容版目前支持的 PostgreSQL 数据库版本为14。
MSSQL 兼容版提供了一个新的数据库访问端口,使其能够支持 SQL Server T-SQL 和常用的 SQL Server 语句,并且支持 TDS 协议的客户端应用程序访问 MSSQL 兼容版的 TDS 侦听器端口。目前支持 TDS 7.1 及更高版本。有关 SQL Server 线路级协议的更多信息,请参见 [MS-TDS]:表格式数据流协议。
你可以使用来自一个应用程序的 TDS 连接和原生 PostgreSQL 连接同时访问数据。
预设情况下,要使用不同的数据库专用语法,请使用以下端口:
·SQL Server,客户端连接到端口1433。
·PostgreSQL,客户端连接到端口5432。
当创建一个 MSSQL 兼容版的 PostgreSQL 数据库实例时,会为该实例预创建一个名字为 babelfish_db 的 PostgreSQL 数据库。此数据库是所有迁移的 SQL Server 对象和结构所在的位置。
二、single database 和 multi database 区别
当你创建 MSSQL 兼容版实例时,你可以选择单个 SQL Server 数据库或者将多个 SQL Server 数据库一起使用。此选项会影响 babelfish_db 数据库内 SQL Server schema 的名称显示在 PostgreSQL 中的方式。迁移模式存储在 migration_mode 参数中。此参数为初始化参数,后续将无法更改此参数。
·在单数据库模式下,babelfish_db 数据库中的用户数据库的模式名称与 SQL Server 中的数据库保持一致。如果选择移动单个数据库,架构将在数据库内重新创建,并且可以引用与 SQL Server 使用的名称相同的名称。例如,dbo 和 sche A schema在 db1 数据库内的场景下,转换到 PostgreSQL 中后则如下。nn通过 TDS 进行连接时,你可以运行 USE db1 以查看来自 T-SQL 的架构 dbo 和 sche A,就像在 SQL Server 中一样。同样的 schema 名称也可以从 PostgreSQL 中看到。
·在多数据库模式下,当从 PostgreSQL 中查看时,用户数据库的架构名称变为 dbname_schemaname。从 T-SQL 中看到 schema 名称保持不变。n
通过 TDS 进行连接时,你可以运行 USE db1 或者 db2,以查看来自 T-SQL 的 schame Sche A 和 Sche B,就像在 SQL Server 中一样。映射的架构名称,例如 db1_dbo 和 dbA_Sche A,在 PostgreSQL 中可见。n每个数据库仍包含你的 schema。每个数据库的名称都加在 SQL Server 架构的名称之前,使用下划线作为分隔符,例如:
·db1 包含 db1_dbo 和 db1_sche A。
·db2 包含 db2_dbo 和 db2_Sche B。n在 babelfish_db 数据库内,T-SQL 用户仍然需要运行 USE dbname 以更改数据库,因此感觉与 SQL Server 相似。
三、如何选择迁移模式
你可根据拥有的用户数据库数量和迁移计划选择迁移模式。创建实例后,你将无法更改迁移模式。选择迁移模式时,请考虑用户数据库和客户端的要求。n当你创建 MSSQL 兼容版实例时,会创建系统数据库 master 和 tempdb。如果你在系统数据库中创建或修改了对象(master 或 tempdb),请确保在新集群中重新创建这些对象。与 SQL Server 不同,PostgreSQL 不会在集群重启后重新初始化 tempdb。
在以下情况下建议使用单个数据库迁移模式:
·如果你要迁移单个 SQL Server 数据库。在单个数据库模式下,迁移的 schema 名称与原始的 SQL Server schema 名称相同。迁移应用程序时,对 SQL 代码进行的更改会减少。
·如果你的最终目标是完全迁移到 PostgreSQL。仅将兼容版作为一个中间状态,这一种场景下,就可以选择单数据库迁移模式。
在以下情况下建议使用多数据库迁移模式:
·如果你正在试用 MSSQL 兼容版且不确定自己未来的需求。
·如果需要一起迁移多个用户数据库,并且最终目标不是执行完全原生的 PostgreSQL 迁移。
·你将来可能要迁移多个数据库。