ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Prisma Server 连接 PostgreSQL:Postgres 连接器配置与实战指南

Prisma Server 连接 PostgreSQL:Postgres 连接器配置与实战指南 后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载导读本文以 Prisma 1.12 官方文档中 Postgres 连接器说明 为核心骨架系统讲解如何通过docker-compose.yml中的PRISMA_CONFIG将 Prisma server 接入 PostgreSQL 数据库。你将掌握完整的连接器配置参数含义、多租户multitenancy与迁移migrations工作模式、本地数据库连接陷阱以及 Prisma 服务端底层如何基于 Slick/JDBC 建立连接池并管理数据库 schema。文中所有细节均可对照本仓库源码与官方配置示例进行验证可直接复制用于实操。Postgres 连接器是什么连接器connector负责把 Prisma server 与底层数据库连接起来。当前仓库同时提供 MySQL、PostgreSQL、MongoDB 等连接器Postgres 连接器相关的实现集中在两个模块API 侧server/connectors/api-connector-postgres/负责运行时读写数据Deploy 侧server/connectors/deploy-connector-postgres/负责服务部署时的 schema 管理与迁移。在 Prisma 1.12 版本中Postgres 连接器支持多租户 启用迁移以及单租户 禁用迁移两种组合详见连接器 OverviewMultitenancy多租户每个部署到该数据库的 Prisma 服务都会创建一个独立的数据库 schemaschema 名由服务名 阶段名组合而成从而实现服务间完全隔离。Migrations迁移启用后prisma deploy会根据你 Prisma API 的 data model 自动迁移数据库结构禁用时Prisma CLI 会改用 introspection数据库内省读取现有 schema 并翻译成对应的 data model适合对接已有应用控制的存量数据库。在 docker-compose.yml 中配置 Postgres 连接器要连接 PostgreSQL必须在作为 Prisma server 基础的docker-compose.yml中显式声明connector: postgres。以下配置节选自官方文档完整覆盖 Prisma server 与 Postgres 两个服务version: 3 services: prisma: image: prismagraphql/prisma:1.12 restart: always ports: - 4466:4466 environment: PRISMA_CONFIG: | managementApiSecret: my-server-secret-123 port: 4466 databases: default: connector: postgres host: postgres port: 5432 user: root password: prisma migrations: true managementSchema: management database: prisma postgres: image: postgres restart: always environment: POSTGRES_USER: root POSTGRES_PASSWORD: prisma volumes: - postgres:/var/lib/postgresql/data volumes: postgres: ~各配置参数的含义与默认值对照仓库中配置解析源码 ConfigLoader.scaladatabases下每个数据库连接支持如下字段参数类型说明connector字符串连接器类型Postgres 必须为postgreshost字符串PostgreSQL 主机地址Docker 内联时通常指向服务名postgresport整数PostgreSQL 端口默认5432user字符串数据库用户名password字符串数据库密码可省略database字符串连接的数据库名缺省时为prisma见下方源码证据managementSchema字符串管理 schema 名缺省时为managementmigrations布尔是否由 Prisma 负责迁移数据库结构schema字符串数据库 schema缺省时 Postgres 使用publicconnectionLimit整数连接数上限缺省时默认 10源码中会再减 1pooled布尔是否启用连接池queueSize整数连接队列大小缺省时默认 1000ssl布尔是否启用 SSL 连接rawAccess布尔是否允许原始访问仓库开发配置中可见从源码看Postgres 连接器有两个关键默认值值得注意默认数据库名prisma与默认 schemapublic定义于 PostgresDatabasesFactory.scalaval defaultDatabase prisma val schema public // default schema管理 schema 名缺省为management见 PostgresInternalDatabaseDefs.scala。因此上面官方示例中的database: prisma与managementSchema: management即使不写连接器也会按同样语义工作。底层连接是如何建立的Postgres 连接器在服务端通过 Slick基于 JDBC 的 Scala 数据库访问库建立连接。核心逻辑位于 PostgresDatabasesFactory.scala可以看到无论是否启用连接池最终 JDBC URL 都是jdbc:postgresql://host:port/database?currentSchemapublicsslsslsslfactoryorg.postgresql.ssl.NonValidatingFactory其中currentSchema固定指向publicSSL 通过ssl参数控制并显式使用NonValidatingFactory非校验型 SSL 工厂。连接池默认线程数 connectionLimit - 1因为其中 1 个连接被 deploy 流程占用队列大小缺省 1000。若不启用pooled则使用DriverDataSourceAsyncExecutor的轻量数据源。API 连接器 PostgresApiConnector.scala 会把读写执行器统一指向该数据源并以$作为 ProjectId 编码分隔符。Deploy 连接器则在 PostgresDeployConnector.scala 的initialize()中完成两件事连接 PostgreSQL 自带的postgres管理库创建名为prisma的数据库InternalDatabaseSchema.createDatabaseAction源码注释明确psql 没有 create if not exists因此忽略该步失败在该库内创建management管理 schema。管理操作还通过pg_advisory_lock(1000)见同一文件第 94-99 行加咨询锁避免并发部署相互干扰。快速上手从零创建一个连接 Postgres 的 Prisma server官方文档给出的完整步骤需要本机安装 Docker运行初始化命令prisma init hello-world选择Create new database选择PostgreSQL进入生成目录cd hello-world启动 Prisma serverdocker-compose up -d部署 Prisma APIprisma deploy。prisma init会在hello-world目录生成包含上文docker-compose.yml与prisma.yml的脚手架prisma deploy则把 data model 对应的 GraphQL API 部署到 server若migrations: true还会同步迁移 PostgreSQL 的表结构。仓库自带的 Postgres 开发环境配置与此一致可直接对照参考服务端配置示例 server/docker-compose/postgres/prisma.ymlconnector: postgres、host: 127.0.0.1、port: 5432、user: postgres、rawAccess: true数据库容器示例 server/docker-compose/postgres/dev-postgres.yml使用timms/postgres-logging:10.3镜像通过环境变量POSTGRES_USER: postgres、POSTGRES_PASSWORD: prisma初始化并显式设置max_connections1000。注意上面这份开发配置中的 host 写的是127.0.0.1适用于 Prisma server 与 Postgres 在同一宿主机直连的场景官方文档示例中的host: postgres则是 Docker Compose 内部网络的服务名适用于两者以容器方式编排的场景二者不可混用。疑难排查连接本机非 Docker 内的数据库Prisma server 运行在 Docker 容器中无法通过localhost直连宿主机上的 PostgreSQL。Docker 18.03 起提供了特殊主机名host.docker.internal该主机名会被路由到宿主机因此将配置中的host改为host.docker.internal即可让容器内 Prisma 访问本机数据库。端口占用清理旧的 Docker 环境如果此前用旧版 Prisma CLI 配合 Docker 跑过直接执行docker-compose up -d可能遇到端口占用错误典型输出为ERROR: for postgres_prisma_1 Cannot start service prisma: driver failed programming external connectivity on endpoint postgres_prisma_Creating postgres_db_1 ... done ERROR: for prisma Cannot start service prisma: driver failed programming external connectivity on endpoint postgres_prisma_1 (b9aa3375c9374b77bab447b3777d1e5a7d78e0081106699b637065e6db4a5a88): Bind for 0.0.0.0:4466 failed: port is already allocated ERROR: Encountered errors while bringing up the project.原因是 4466 端口已被旧的 Prisma 容器占用。清理方式docker kill $(docker ps -aq) docker rm $(docker ps -aq)注意如果你使用的是fish或其他 shell可能需要相应调整上述命令例如docker kill (docker ps -aq)。清理后重新执行docker-compose up -d即可。该错误信息在仓库文档 MySQL 连接器 中也有同样记录属于所有基于 Docker 的数据库连接器共性问题。小结将 Prisma server 接入 PostgreSQL 的关键在于PRISMA_CONFIG中正确声明connector: postgres及其主机、端口、账号、数据库与管理 schema 等参数。理解multitenancy与migrations两种模式能帮你决定是让 Prisma 全权管理 schema还是对存量数据库做只读映射。若想深入实现细节可继续阅读连接与连接池实现PostgresDatabasesFactory.scala部署期 schema 管理PostgresDeployConnector.scala连接器能力定义与多租户/迁移语义连接器 Overview本地开发配置server/docker-compose/postgres/prisma.yml赞分享后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载相关推荐Prisma 1.14 Postgres 连接器Connector配置指南连接 Prisma Server 与 PostgreSQL 数据库Prisma 1.14 Postgres 连接器Connector配置指南连接 Prisma Server 与 PostgreSQL 数据库 导读 本文围后端数据库GraphQLPrisma 服务器接入 PostgreSQLPostgres 连接器配置、部署与源码原理全解析Prisma 服务器接入 PostgreSQLPostgres 连接器配置、部署与源码原理全解析 导读 本文围绕 Prisma 官方文档中 Postgres后端数据库GraphQLOpenMetadata PowerBI Report Server 连接器配置实战指南OpenMetadata PowerBI Report Server 连接器配置实战指南 PowerBI Report Server 是微软面向本地on pr数据目录数据血缘数据治理后端MCP 服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表