Babelfish for RDS PostgreSQL常用操作及兼容性说明

118 阅读2分钟

本文已参与「新人创作礼」活动.一起开启掘金创作之路。

Babelfish for RDS PostgreSQL常用操作及兼容性说明

本文介绍通过TDS端口连接Bablefish for RDS PostgreSQL实例后的常见操作,以及SQL的兼容情况说明。

常见操作

操作类别SQL示例
系统查询查询版本```
SELECT @@version;
| 查询数据库信息    | ```
SELECT * FROM sys.databases;
```                                                                                                                                                                                                  |                                                                                                                                                               |
| 数据库操作      | 创建数据库                                                                                                                                                                                                                                 | ```
CREATE DATABASE testdb;
```**说明** 迁移模式为single-db时,只支持创建一个数据库,如果您已创建了一个数据库,则无法再次创建。                                                                        |
| 查询数据库      | ```
SELECT * FROM sys.databases WHERE name = 'testdb';
```                                                                                                                                                                            |                                                                                                                                                               |
| 切换数据库      | ```
USE testdb GO SELECT db_name();
```                                                                                                                                                                                               |                                                                                                                                                               |
| 删除数据库      | ```
DROP DATABASE testdb;
```                                                                                                                                                                                                         |                                                                                                                                                               |
| Schema操作   | 创建Schema                                                                                                                                                                                                                              | ```
CREATE SCHEMA sch_demo;
```                                                                                                                               |
| 查看Schema   | ```
SELECT * FROM sys.schemas AS sch WHERE sch.name = 'sch_demo';
```                                                                                                                                                                 |                                                                                                                                                               |
| 创建Schema下表 | ```
CREATE TABLE sch_demo.tb_demo(id int);  SELECT     sch.name AS schema_name,     tb.name AS table_name FROM sys.tables AS tb     INNER JOIN  sys.schemas AS sch     ON tb.schema_id = sch.schema_id WHERE tb.name = 'tb_demo';
``` |                                                                                                                                                               |
| 删除Schema   | **说明** 如果Schema下存在表,需要先删除表后,再删除Schema。```
DROP TABLE sch_demo.tb_demo; GO  DROP SCHEMA sch_demo; GO
```                                                                                                                               |                                                                                                                                                               |
| 表操作        | 新建表                                                                                                                                                                                                                                   | ```
USE testdb GO  CREATE TABLE dbo.tb_test(     id int not null IDENTITY(1,1) PRIMARY KEY,     name varchar(50)) GO
```                                      |
| 查询表        | ```
SELECT sche.name AS schema_name, tb.name AS table_name FROM sys.tables AS tb     INNER JOIN sys.schemas AS sche     ON tb.schema_id = sche.schema_id WHERE tb.name = 'tb_test'; GO
```                                            |                                                                                                                                                               |
| 新增字段       | ```
ALTER TABLE dbo.tb_test ADD col_added bigint null; GO
```                                                                                                                                                                         |                                                                                                                                                               |
| 修改表字段      | ```
ALTER TABLE dbo.tb_test ALTER column col_added varchar(50); GO
```                                                                                                                                                                |                                                                                                                                                               |
| 删除表字段      | ```
ALTER TABLE dbo.tb_test DROP column col_added; GO
```                                                                                                                                                                             |                                                                                                                                                               |
| 创建索引       | ```
CREATE INDEX ix_tb_test_name ON tb_test(name); GO
```                                                                                                                                                                             |                                                                                                                                                               |
| 删除索引       | ```
DROP INDEX ix_tb_test_name ON tb_test; GO
```                                                                                                                                                                                     |                                                                                                                                                               |
| 数据库操作      | INSERT                                                                                                                                                                                                                                | ```
INSERT INTO dbo.tb_test SELECT 'A' UNION ALL SELECT 'B'; GO
```                                                                                           |
| SELECT     | ```
SELECT * FROM dbo.tb_test;
```                                                                                                                                                                                                    |                                                                                                                                                               |
| UPDATE     | ```
UPDATE TOP(1) dbo.tb_test SET name = 'A_updated'; GO
```                                                                                                                                                                          |                                                                                                                                                               |
| DELETE     | ```
DELETE TOP(1) FROM dbo.tb_test; GO  SELECT * FROM dbo.tb_test;
```                                                                                                                                                                |                                                                                                                                                               |
| 存储过程       | 创建存储过程                                                                                                                                                                                                                                | ```
USE testdb GO  CREATE PROC dbo.UP_getDemoData(     @id int ) AS BEGIN     SET NOCOUNT ON     SELECT *     FROM dbo.tb_test     WHERE id = @id END; GO
``` |
| 查看存储过程     | ```
SELECT * FROM sys.procedures WHERE name = 'up_getdemodata';
```                                                                                                                                                                   |                                                                                                                                                               |
| 执行存储过程     | ```
EXEC dbo.UP_getDemoData @id = 7; GO
```                                                                                                                                                                                           |                                                                                                                                                               |
| 删除存储过程     | ```
USE testdb GO DROP PROC dbo.UP_getDemoData GO
```                                                                                                                                                                                 |                                                                                                                                                               |

## 兼容性说明




**说明** 本文仅介绍了部分常见不兼容场景,更多信息,请参见[Babelfish for PostgreSQL官方文档](https://babelfishpg.org/docs/usage/limitations-of-babelfish/)。

不支持的SQL操作如下:

-   查看表结构。

   


    ```
    EXEC sp_help 'dbo.tb_test'
    ```

-   不支持在修改表字段时设置默认值NULL。

    


    ```
    ALTER TABLE dbo.tb_test ALTER column col_added varchar(50) null;
    GO
    ```

-   不支持重建索引,建议删除后,重新创建。

    

    ```
    ALTER INDEX ix_tb_test_name ON tb_test REBUILD;
    GO
    ```

-   不支持修改存储过程,建议删除后,重新创建。

   


    ```
    USE testdb
    GO

    ALTER PROC dbo.UP_getDemoData(
        @id int
    )
    AS
    BEGIN
        SET NOCOUNT ON
        SELECT *
        FROM dbo.tb_test
        WHERE id >= @id
    END;
    GO
    ```

-   不支持执行计划(showplan_xml)。

  


    ```
    SET showplan_xml ON
    SELECT * from tb_test;
    ```