

# 获取 Babelfish 系统目录中的信息
<a name="babelfish-query-database"></a>

通过查询 SQL Server 中使用的许多相同系统视图，可以获取有关存储在 Babelfish 集群中的数据库对象的信息。Babelfish 的每个新版本都增加了对更多系统视图的支持。有关当前可用视图的列表，请参阅 [SQL Server system catalog views](#system-catalog-table)表。

这些系统视图提供了系统目录 (`sys.schemas`) 中的信息。就 Babelfish 而言，这些视图同时包含 SQL Server 和 PostgreSQL 系统架构。要查询 Babelfish 以获取系统目录信息，可以使用 TDS 端口或 PostgreSQL 端口，如以下示例所示。
+ **使用 `sqlcmd` 或另一个 SQL Server 客户端查询 T-SQL 端口**。

  ```
  1> SELECT * FROM sys.schemas
  2> GO
  ```

  此查询返回 SQL Server 和 Aurora PostgreSQL 系统架构，如以下内容中所示。

  ```
  name      
  ---------------------------------------------------------
  demographic_dbo          
  public                                                    
  sys                           
  master_dbo
  tempdb_dbo
  ...
  ```
+ **使用 `psql` 或 `pgAdmin` 查询 PostgreSQL 端口** 此示例使用 `psql` 列出架构元命令 (`\dn`)：

  ```
  babelfish_db=> \dn
  ```

  此查询返回的结果集与 `sqlcmd` 在 T-SQL 端口上返回的结果集相同。

  ```
          List of schemas
               Name              
  ------------------------------
  
   demographic_dbo           
  
   public                       
   sys                          
   master_dbo                   
   tempdb_dbo                   
  ...
  ```

## Babelfish 中提供的 SQL Server 系统目录
<a name="babelfish-query-database.system-catalogs"></a>

在下表中，您可以找到 Babelfish 中当前实现的 SQL Server 视图。有关 SQL Server 中的系统目录的更多信息，请参阅 Microsoft 文档中的[系统目录视图 (Transact-SQL)](https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/catalog-views-transact-sql?view=sql-server-ver16)。<a name="system-catalog-table"></a>


| 视图名称 | 描述或 Babelfish 限制（如果有） | 
| --- | --- | 
| `sys.all_columns` | 所有表和视图中的所有列 | 
| `sys.all_objects` | 所有架构中的所有对象 | 
| `sys.all_sql_modules` | `sys.sql_modules` 和 `sys.system_sql_modules` 的联合 | 
| `sys.all_views` | 所有架构中的所有视图 | 
| `sys.columns` | 用户定义的表和视图中的所有列 | 
| `sys.configurations` | Babelfish 支持仅限于单个只读配置。 | 
| `sys.data_spaces` | 为每个数据空间包含一行。这可以是文件组、分区方案或 FILESTREAM 数据文件组。 | 
| `sys.database_files` | 一个每数据库视图，它对于存储在数据库本身中的数据库的每个文件都包含一行。 | 
| `sys.database_mirroring` | 有关信息，请参阅 Microsoft Transact-SQL 文档中的 [sys.database\$1mirroring](https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-database-mirroring-transact-sql?view=sql-server-ver16)。 | 
| `sys.database_principals` | 有关信息，请参阅 Microsoft Transact-SQL 文档中的 [sys.database\$1principals](https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-database-principals-transact-sql?view=sql-server-ver16)。 | 
| `sys.database_role_members` | 有关信息，请参阅 Microsoft Transact-SQL 文档中的 [sys.database\$1role\$1members](https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-database-role-members-transact-sql?view=sql-server-ver16)。 | 
| `sys.databases` | 所有架构中的所有数据库 | 
| `sys.dm_exec_connections` | 有关信息，请参阅 Microsoft Transact-SQL 文档中的 [sys.dm\$1exec\$1connections](https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-exec-connections-transact-sql?view=sql-server-ver16)。 | 
| `sys.dm_exec_sessions` | 有关信息，请参阅 Microsoft Transact-SQL 文档中的 [sys.dm\$1exec\$1sessions](https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-exec-sessions-transact-sql?view=sql-server-ver16)。 | 
| `sys.dm_hadr_database_replica_states` | 有关信息，请参阅 Microsoft Transact-SQL 文档中的 [sys.dm\$1hadr\$1database\$1replica\$1states](https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-hadr-database-replica-states-transact-sql?view=sql-server-ver16)。 | 
| `sys.dm_os_host_info` | 有关信息，请参阅 Microsoft Transact-SQL 文档中的 [sys.dm\$1os\$1host\$1info](https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-os-host-info-transact-sql?view=sql-server-ver16)。 | 
| `sys.endpoints` | 有关信息，请参阅 Microsoft Transact-SQL 文档中的 [sys.endpoints](https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-endpoints-transact-sql?view=sql-server-ver16)。 | 
| `sys.indexes` | 有关信息，请参阅 Microsoft Transact-SQL 文档中的 [sys.indexes](https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-indexes-transact-sql?view=sql-server-ver16)。 | 
| `sys.languages` | 有关信息，请参阅 Microsoft Transact-SQL 文档中的 [sys.languages](https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-fulltext-languages-transact-sql?view=sql-server-ver16)。 | 
| `sys.schemas` | 所有架构 | 
| `sys.server_principals` | 所有登录名和角色 | 
| `sys.sql_modules` | 有关信息，请参阅 Microsoft Transact-SQL 文档中的 [sys.sql\$1modules](https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-sql-modules-transact-sql?view=sql-server-ver16)。 | 
| `sys.sysconfigures` | Babelfish 支持仅限于单个只读配置。 | 
| `sys.syscurconfigs` | Babelfish 支持仅限于单个只读配置。 | 
| `sys.sysprocesses` | 有关信息，请参阅 Microsoft Transact-SQL 文档中的 [sys.sysprocesses](https://docs.microsoft.com/en-us/sql/relational-databases/system-compatibility-views/sys-sysprocesses-transact-sql?view=sql-server-ver16)。 | 
| `sys.system_sql_modules` | 有关信息，请参阅 Microsoft Transact-SQL 文档中的 [sys.system\$1sql\$1modules](https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-system-sql-modules-transact-sql?view=sql-server-ver16)。 | 
| `sys.table_types` | 有关信息，请参阅 Microsoft Transact-SQL 文档中的 [sys.table\$1types](https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-table-types-transact-sql?view=sql-server-ver16)。 | 
| `sys.tables` | 一个架构中的所有表 | 
| `sys.xml_schema_collections` | 有关信息，请参阅 Microsoft Transact-SQL 文档中的 [sys.xml\$1schema\$1collections](https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-xml-schema-collections-transact-sql?view=sql-server-ver16)。 | 

PostgreSQL 实现的系统目录与 SQL Server 对象目录视图类似。有关系统目录的完整列表，请参阅 PostgreSQL 文档的[系统目录](https://www.postgresql.org/docs/current/catalogs.html)。

## Babelfish 支持 DDL 导出
<a name="babelfish-ddl-exports"></a>

在 Babelfish 2.4.0 和 3.1.0 版本中，Babelfish 支持使用各种工具导出 DDL。例如，您可以使用 SQL Server Management Studio（SSMS）中的此功能为适用于 Aurora PostgreSQL 的 Babelfish 数据库中的各种对象生成数据定义脚本。然后，可以使用此脚本中生成的 DDL 命令在另一个适用于 Aurora PostgreSQL 的 Babelfish 数据库或 SQL Server 数据库中创建相同的对象。

Babelfish 在指定的版本中支持以下对象的 DDL 导出。


| 对象列表 | 2.4.0 | 3.1.0 | 
| --- | --- | --- | 
| 用户表 | 支持 | 是 | 
| 主键 | 支持 | 是 | 
| 外键 | 支持 | 是 | 
| 唯一约束 | 支持 | 是 | 
| 索引 | 支持 | 是 | 
| 检查约束 | 支持 | 是 | 
| 视图 | 支持 | 是 | 
| 存储过程 | 支持 | 是 | 
| 用户定义的函数 | 支持 | 是 | 
| 表值函数 | 支持 | 是 | 
| 触发器 | 支持 | 是 | 
| 用户定义的数据类型 | 否 | 否 | 
| 用户定义的表类型 | 否 | 否 | 
| 用户 | 否 | 否 | 
| 登录名 | 否 | 否 | 
| 序列 | 否 | 否 | 
| 角色 | 否 | 否 | 

### 导出的 DDL 的局限性
<a name="babelfish-ddl-exports-limitations"></a>
+ **在使用导出的 DDL 重新创建对象之前使用备用方案** – Babelfish 并不支持导出的 DDL 脚本中的所有命令。使用备用方案可避免在 Babelfish 中通过 DDL 命令重新创建对象时导致错误。有关备用方案的更多信息，请参阅[使用转义孵化管理 Babelfish 错误处理](babelfish-strict.md)
+ **包含带有显式 COLLATE 子句的 CHECK 约束的对象** – 带有从 SQL Server 数据库生成的这些对象的脚本具有与 Babelfish 数据库中不同但等效的排序规则。例如，一些排序规则（如 sql\$1latin1\$1general\$1cp1\$1cs\$1as、sql\$1latin1\$1general\$1cp1251\$1cs\$1as 和 latin1\$1general\$1cs\$1as）将生成为 latin1\$1general\$1cs\$1as，这是最接近的 Windows 排序规则。