You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony从SQLServer迁移至PostgreSQL时指定schema未生效求助

解决Symfony + PostgreSQL指定架构不生效的问题

1. 修正Doctrine DBAL核心配置

打开config/packages/doctrine.yaml,在dbal配置块中明确声明默认架构:

doctrine:
    dbal:
        url: '%env(resolve:DATABASE_URL)%'
        default_schema: snb # 新增此行,指定全局默认架构
        # 其他DBAL配置项...

2. 为ORM实体映射指定架构

同样在doctrine.yaml的orm部分,给你的实体命名空间绑定默认架构:

doctrine:
    # ... 上述DBAL配置
    orm:
        auto_generate_proxy_classes: true
        naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
        auto_mapping: true
        mappings:
            App:
                is_bundle: false
                type: attribute
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'App\Entity'
                alias: App
                schema: snb # 为App下所有实体指定默认架构

3. 确认实体类的Schema注解

如果需要单独为某个实体指定架构,在实体类上添加对应注解:

属性格式(Symfony 5.4+)

#[ORM\Entity]
#[ORM\Table(schema: 'snb')]
class YourEntity
{
    // ... 实体字段定义
}

注解格式(旧版本兼容)

/**
 * @ORM\Entity
 * @ORM\Table(schema="snb")
 */
class YourEntity
{
    // ... 实体字段定义
}

4. 清除缓存确保配置生效

执行命令清除Symfony和Doctrine的缓存,避免旧配置残留:

# 开发环境
php bin/console cache:clear

# 生产环境
php bin/console cache:clear --env=prod

5. 修正连接字符串的serverVersion参数

注意你当前连接字符串中的serverVersion=18是SQL Server的版本号,PostgreSQL需要填写实际安装的版本(如14、15、16),修正后的示例:

postgresql://postgres:*password*@127.0.0.1:5432/apps?serverVersion=15&charset=utf8&default_table_schema=snb

内容的提问来源于stack exchange,提问作者digitalway

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 13:22:34