7.1.5. 连接到非默认数据库架构

PostgreSQL 和 Microsoft SQL Server 支持连接到指定的数据库架构。默认情况下,PostgreSQL 会连接到 public,SQL Server 会连接到 dbo

PostgreSQL

要在 PostgreSQL 上使用非默认架构,请在createDbconnectionParams 属性和 updateDb Gradle 任务中指定 currentSchema 参数,例如:

  1. task createDb(dependsOn: assembleDbScripts, type: CubaDbCreation) {
  2. dbms = 'postgres'
  3. host = 'localhost'
  4. dbName = 'my_db'
  5. connectionParams = '?currentSchema=my_schema'
  6. dbUser = 'cuba'
  7. dbPassword = 'cuba'
  8. }

如果正在使用 Studio,请将此连接参数添加到 Project properties 窗口的 Connection params 字段。Studio 会自动更新 build.gradle。之后,可以更新或重新创建数据库,所有表将在指定的架构下创建。

Microsoft SQL Server

在 Microsoft SQL Server 上,仅提供连接属性是不够的,必须将架构与数据库用户相关联。下面是创建一个新数据库并使用非默认架构的示例。

  • 创建一个登录用户:

    1. create login JohnDoe with password='saPass1'
  • 创建一个新数据库:

    1. create database my_db
  • sa 身份连接到新数据库,创建架构,然后创建用户并授予其所有者权限:

    1. create schema my_schema
    2. create user JohnDoe for login JohnDoe with default_schema = my_schema
    3. exec sp_addrolemember 'db_owner', 'JohnDoe'

现在,应该在 updateDb Gradle 任务(或 Studio 项目属性)的 connectionParams 属性中指定 currentSchema 参数。实际上,此属性不是由 SQL Server JDBC 驱动程序处理的,但它会告诉 Studio 和 CUBA Gradle 插件使用什么架构。

  1. task updateDb(dependsOn: assembleDbScripts, type: CubaDbUpdate) {
  2. dbms = 'mssql'
  3. dbmsVersion = '2012'
  4. host = 'localhost'
  5. dbName = 'my_db'
  6. connectionParams = ';currentSchema=my_schema'
  7. dbUser = 'JohnDoe'
  8. dbPassword = 'saPass1'
  9. }

请注意,由于 SQL Server 的特性 - 非默认架构需要与用户关联,所以无法从 Studio 或在命令行中执行 createDb 来重新创建 SQL Server 数据库。但是,如果在 Studio 中运行 Update database 或在命令行中运行 updateDb,则现有数据库中指定架构下所有必须的表都会被创建。