PostgreSQL SSL接続エラーの解決方法(Drizzle ORM)

PostgreSQL SSL接続エラーの解決方法(Drizzle ORM)

Drizzle ORMでPostgreSQLに接続する際のSSL関連エラーとその解決方法について

Drizzle #Drizzle#API#DB

PostgreSQL SSL接続エラーの解決方法(Drizzle ORM)

サムネイル

Drizzle ORMでPostgreSQLに接続する際のSSL関連エラーとその解決方法について

更新日: 8/17/2025

問題の概要

ISSUE - 課題

データベース接続時に以下のエラーが発生しました。

PostgresError: no pg_hba.conf entry for host "10.0.x.x", 
user "postgres", database "database_name", no encryption
    code: '28000'

no encryptionはSSL接続が使用されていないとのこと。

原因

AWS RDSなどのマネージドPostgreSQLサービスは、セキュリティのためSSL接続を要求します。Drizzle ORMのデフォルト設定はSSLを使用しないため、接続が拒否されます。

解決方法

設定ファイルの修正

もしくはjsonも対象

import { defineConfig } from 'drizzle-kit';

export default defineConfig({
  schema: './src/db/schema.ts',
  out: './drizzle',
  dialect: 'postgresql',
  dbCredentials: {
    host: process.env.DB_HOST!,
    port: parseInt(process.env.DB_PORT!),
    user: process.env.DB_USER!,
    password: process.env.DB_PASSWORD!,
    database: process.env.DB_NAME!,
    ssl: {
      rejectUnauthorized: false  // SSL有効化
    }
  },
});

アプリ側

import { drizzle } from 'drizzle-orm/postgres-js';
import postgres from 'postgres';

const client = postgres({
  host: process.env.DB_HOST!,
  port: parseInt(process.env.DB_PORT!),
  user: process.env.DB_USER!,
  password: process.env.DB_PASSWORD!,
  database: process.env.DB_NAME!,
  ssl: {
    rejectUnauthorized: false  // SSL有効化
  }
});

export const db = drizzle(client);

接続文字列を使用する場合

const connectionString = `postgresql://${user}:${password}@${host}:${port}/${database}?sslmode=require`;

const client = postgres(connectionString);
export const db = drizzle(client);

動作確認

修正後、以下のコマンドでmigrationが成功することを確認します。

# npmの場合
npm run drizzle-kit migrate

注意事項

  • rejectUnauthorized: falseは証明書検証を省略
  • 本番環境では適切な証明書検証の実装を推奨
  • 設定ファイルとコードの両方でSSL設定が必要

検索

検索条件に一致する記事が見つかりませんでした