我在(研讨会上)尝试使用Babelfish for Aurora PostgreSQL

首先

2022年11月4日我参加了AWS举办的“介绍Babelfish for Aurora PostgreSQL”研讨会,并于2022年11月5日参加了Babelfish for Aurora PostgreSQL的工作坊,为了备忘起见,我记录下来。

巴别鱼是什么?

Babelfish for PostgreSQL是一个开源项目,根据Apache 2.0和PostgreSQL许可证可供使用。它在2021年10月28日发布了1.0版本,因此相对较新。截至2022年11月4日,最新版本2.1.2已发布。通过理解SQL Server的网络协议和T-SQL(Microsoft SQL Server查询语言),Babelfish使得PostgreSQL能够执行针对Microsoft SQL Server应用程序的查询。

Babelfish for Aurora PostgreSQL 是 Amazon Aurora PostgreSQL 兼容版,并且可以理解由 Aurora 开发的适用于 Microsoft SQL Server 的应用程序的命令。

可以这样说,SQL Server的查询可以直接在Aurora PostgreSQL上运行。

巴贝尔鱼的原始资料

顺便提一句,Babelfish 的名字的灵感来源于一本名为《银河系漫游指南》的小说中的全能翻译鱼。

工作坊概述

参加者将使用SQL Server客户端(SQL Server Management Studio:SSMS)和PostgreSQL客户端(psql)通过开启Babelfish功能的Aurora for PostgreSQL来访问工作坊。

工作坊的资料可以从这里的GitHub上下载。

以中文母语进行改写:

工作坊的流程如下,只需花费不到一小时即可尝试,适合在有点空闲时间的时候试一试。

    1. 创建SQL Server客户端实例:大约10分钟

 

    1. 创建用于Babelfish Aurora PostgreSQL的实例(创建Aurora实例):大约20分钟

 

    1. 创建psql客户端环境:大约10分钟

 

    分别从SQL Server客户端和psql客户端连接到Aurora:大约10分钟
image.png

请参考Github的工作坊材料获取详细的步骤。
需要注意的是,似乎只能在创建Aurora时选择Babelfish for Aurora PostgreSQL功能,目前创建后无法更改,因此需要注意。(因为在从快照恢复时没有提到Babelfish本身,所以不可行)
如果要关闭该功能,可以通过更改参数组来实现。

创建用于 SQL Server 客户端的实例

因为需要作为SQL Server客户端的功能,所以希望使用已安装SQL Server的映像来启动EC2实例。
虽然也有安装在Linux上的映像可供使用,但根据工作坊的步骤,假定是使用Windows系统。

image.png

2. 创建用于Aurora PostgreSQL的Babelfish (创建Aurora实例)

image.png
image.png

创建用于 psql 客户端的环境。

在工作坊中使用了Cloud9环境,但由于有安装了PostgreSQL的EC2,所以决定使用那个。

通过SQL Server客户端和psql客户端分别连接到Aurora。

如果从SQL Server客户端连接,请连接到SQL Server端点;如果从psql客户端连接,请连接到PostgreSQL端点。

    SQL Server エンドポイントへの接続(ワークショップではSSMSを利用しているが、コマンドラインで十分なのでsqlcmdで接続)
PS C:\Windows\system32> sqlcmd -S database-2.cluster-xxxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -U postgres -P xxxxxxx
1> select @@version;
2> go
version
---------------------------------------------------------------------------------------------------------------------
Babelfish for Aurora Postgres with SQL Server Compatibility - 12.0.2000.8
Sep 28 2022 00:39:06
Copyright (c) Amazon Web Services
PostgreSQL 13.7 on aarch64-unknown-linux-gnu

(1 rows affected)

1> SELECT CAST(SERVERPROPERTY('Babelfish') AS VARCHAR)
2> go
serverproperty
------------------------------
1

(1 rows affected)
    PostgreSQL エンドポイントへの接続
$ psql -h database-2.cluster-xxxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -p 5432 -U postgres -d postgres
Password for user postgres:
psql (13.7)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES128-GCM-SHA256, bits: 128, compression: off)
Type "help" for help.

postgres=>

    SQL Server 側でテストデータのインサート
1> USE [master]
2> DROP DATABASE IF EXISTS MySSMSTest
3> CREATE DATABASE MySSMSTest
4> Go
Changed database context to 'master'.

1>
2>
3>
4>
5> USE [MYSSMSTest]
6> CREATE TABLE [dbo].[Student] (
7> [StudentId] [int] NOT NULL,
8> [Name] [nvarchar](50) NOT NULL,
9> [Age] [tinyint] NOT NULL,
10> CONSTRAINT [PK_Student] PRIMARY KEY
11> (
12> [StudentId] ASC
13> )
14> ) ON [PRIMARY]
15> GO
Changed database context to 'myssmstest'.
1>
2>
3>
4>
5> INSERT INTO [dbo].[Student]([StudentId],[Name],[Age]) VALUES (1,'John',15)
6> INSERT INTO [dbo].[Student]([StudentId],[Name],[Age]) VALUES (2,'Kate',20)
7> INSERT INTO [dbo].[Student]([StudentId],[Name],[Age]) VALUES (3,'Sara',65)
8> INSERT INTO [dbo].[Student]([StudentId],[Name],[Age]) VALUES (4,'Mike',19)
9> INSERT INTO [dbo].[Student]([StudentId],[Name],[Age]) VALUES (5,'Ruby',35)
10> GO
(1 rows affected)
(1 rows affected)
(1 rows affected)
(1 rows affected)
(1 rows affected)
1>
1> select * from [dbo].[Student]
2> go
StudentId   Name                                               Age
----------- -------------------------------------------------- ---
          1 John                                                15
          2 Kate                                                20
          3 Sara                                                65
          4 Mike                                                19
          5 Ruby                                                35

(5 rows affected)
1>
    PostgreSQL 側での確認
postgres=> \l
                                     List of databases
     Name     |  Owner   | Encoding |   Collate   |    Ctype    |    Access privileges
--------------+----------+----------+-------------+-------------+--------------------------
 babelfish_db | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres            +
              |          |          |             |             | postgres=CTc/postgres   +
              |          |          |             |             | sysadmin=C*T*c*/postgres+
              |          |          |             |             | master_dbo=CTc/sysadmin +
              |          |          |             |             | tempdb_dbo=CTc/sysadmin +
              |          |          |             |             | msdb_dbo=CTc/sysadmin   +
              |          |          |             |             | dbo=CTc/sysadmin
 postgres     | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 rdsadmin     | rdsadmin | UTF8     | en_US.UTF-8 | en_US.UTF-8 | rdsadmin=CTc/rdsadmin
 template0    | rdsadmin | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/rdsadmin             +
              |          |          |             |             | rdsadmin=CTc/rdsadmin
 template1    | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres             +
              |          |          |             |             | postgres=CTc/postgres
(5 rows)

postgres=> \c babelfish_db
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES128-GCM-SHA256, bits: 128, compression: off)
You are now connected to database "babelfish_db" as user "postgres".
babelfish_db=> select * from dbo.student;
 studentid | name | age
-----------+------+-----
         1 | John |  15
         2 | Kate |  20
         3 | Sara |  65
         4 | Mike |  19
         5 | Ruby |  35
(5 rows)

每个终端点解释的SQL也会发生变化。

image.png

概括

通过使用Babelfish,确认可以将Aurora for PostgreSQL像SQL Server一样操作。
目前具体的用例还想不出来,但考虑到有很多限制,将这些限制考虑在内可以扩大将来的选择余地。

在海豚鱼中可以进行以下数据库操作。

    • master / tempdb ユーザー DB / sysdatabase & sp_helpdb

 

    CREATE DATABASE / USE / SELECT DB_NAME()

以下是在Babelfish的Aurora PostgreSQL上的实现(摘自“Babelfish for Aurora PostgreSQL介绍”)。

    • Aurora PostgreSQL 上に Babelfish 用の database : babelfish_db が作成される

 

    • Babelfish エンドポイントからの接続は 自動的に babelfish_db に接続

 

    • SQL Server の DB / スキーマ は babelfish_db 内の スキーマにマッピング

 

    • 上記のマッピングは SQL Server エンドポイントを利用するアプリケーションからは透過的

 

    Babelfish 構成時に シングルデータベースモード か マルチデータベースモードを選択
请特别留意
    • バージョンごとに Babelfish でサポートされている機能

 

    • Babelfish でサポートされていない機能

 

    • Babelfish システムカタログからの情報の入手

 

    Babelfish がサポートする照合順序
广告
将在 10 秒后关闭
bannerAds