Skip to content
Migrating from NextAuth.js v4? Read our migration guide.

PostgreSQL Adapter

리소스

설정

설치

npm install @auth/pg-adapter pg

환경 변수

DATABASE_HOST=
DATABASE_NAME=
DATABASE_USER=
DATABASE_PASSWORD=

설정

./auth.ts
import NextAuth from "next-auth"
import PostgresAdapter from "@auth/pg-adapter"
import { Pool } from "pg"
 
const pool = new Pool({
  host: process.env.DATABASE_HOST,
  user: process.env.DATABASE_USER,
  password: process.env.DATABASE_PASSWORD,
  database: process.env.DATABASE_NAME,
  max: 20,
  idleTimeoutMillis: 30000,
  connectionTimeoutMillis: 2000,
})
 
export const { handlers, auth, signIn, signOut } = NextAuth({
  adapter: PostgresAdapter(pool),
  providers: [],
})

Neon의 PostgreSQL을 Vercel Postgres처럼 사용한다면, @neondatabase/serverless를 사용하여 edge 런타임에서 작업할 수 있습니다.

./auth.ts
import NextAuth from "next-auth"
import PostgresAdapter from "@auth/pg-adapter"
import { Pool } from "@neondatabase/serverless"
 
// 요청 핸들러 외부에서 `Pool`을 생성하지 마세요.
// Neon의 Postgres는 요청 간에 풀을 유지할 수 없습니다.
 
export const { handlers, auth, signIn, signOut } = NextAuth(() => {
  // 요청 핸들러 내부에서 `Pool`을 생성합니다.
  const pool = new Pool({ connectionString: process.env.DATABASE_URL })
  return {
    adapter: PostgresAdapter(pool),
    providers: [],
  }
})

스키마

이 어댑터에서 사용하는 테이블의 SQL 스키마는 다음과 같습니다. 더 자세한 내용은 데이터베이스 모델 문서 페이지에서 확인할 수 있습니다.

CREATE TABLE verification_token
(
  identifier TEXT NOT NULL,
  expires TIMESTAMPTZ NOT NULL,
  token TEXT NOT NULL,
 
  PRIMARY KEY (identifier, token)
);
 
CREATE TABLE accounts
(
  id SERIAL,
  "userId" INTEGER NOT NULL,
  type VARCHAR(255) NOT NULL,
  provider VARCHAR(255) NOT NULL,
  "providerAccountId" VARCHAR(255) NOT NULL,
  refresh_token TEXT,
  access_token TEXT,
  expires_at BIGINT,
  id_token TEXT,
  scope TEXT,
  session_state TEXT,
  token_type TEXT,
 
  PRIMARY KEY (id)
);
 
CREATE TABLE sessions
(
  id SERIAL,
  "userId" INTEGER NOT NULL,
  expires TIMESTAMPTZ NOT NULL,
  "sessionToken" VARCHAR(255) NOT NULL,
 
  PRIMARY KEY (id)
);
 
CREATE TABLE users
(
  id SERIAL,
  name VARCHAR(255),
  email VARCHAR(255),
  "emailVerified" TIMESTAMPTZ,
  image TEXT,
 
  PRIMARY KEY (id)
);
Auth.js © Balázs Orbán and Team - 2025