有奖捉虫:行业应用 & 管理与支持文档专题 HOT
腾讯云数据库 PostgreSQL 基于 Babelfish for PostgreSQL 进行改造适配支持了 Microsoft SQL Server 数据类型、语法和函数。此外还支持 SQL Server 线路级协议(TDS),允许 SQL Server 应用程序与 PostgreSQL 进行通信。这样做有助于业务以较少的更改迁移数据库对象、存储过程和应用程序代码,将数据库从 SQL Server 转换为 PostgreSQL。
云数据库 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 对象和结构所在的位置。
注意
在 MSSQL 兼容版实例中,系统会为实例预留 babelfish_db 数据库名称。
当您连接到 TDS 端口时,会话将被自动转换至 babelfish_db 数据库中。从 T-SQL 来看,该结构看起来类似于连接到 SQL Server 实例。您可以看到 mastertempdb 数据库以及 sys.databases 目录。您可以创建其他用户数据库并使用 USE 语句在数据库之间切换。
当您创建 SQL Server 用户数据库时,该数据库将映射为 babelfish_db 数据库中的 schema。数据库保留的跨数据库语法和语义等于或类似于 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 中后则如下图。n

n通过 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 迁移。
您将来可能要迁移多个数据库。