diff --git a/nonebot_bison/config/db_model.py b/nonebot_bison/config/db_model.py
index e1feade..d5730cf 100644
--- a/nonebot_bison/config/db_model.py
+++ b/nonebot_bison/config/db_model.py
@@ -1,10 +1,10 @@
 import datetime
 from pathlib import Path
-from typing import Optional
 
 from nonebot_plugin_datastore import get_plugin_data
 from nonebot_plugin_saa.utils import PlatformTarget
 from sqlalchemy import JSON, ForeignKey, String, UniqueConstraint
+from sqlalchemy.dialects.postgresql import JSONB
 from sqlalchemy.orm import Mapped, mapped_column, relationship
 
 from ..types import Category, Tag
@@ -15,7 +15,7 @@ get_plugin_data().set_migration_dir(Path(__file__).parent / "migrations")
 
 class User(Model):
     id: Mapped[int] = mapped_column(primary_key=True)
-    user_target: Mapped[dict] = mapped_column(JSON)
+    user_target: Mapped[dict] = mapped_column(JSON().with_variant(JSONB, "postgresql"))
 
     subscribes: Mapped[list["Subscribe"]] = relationship(back_populates="user")
 
diff --git a/nonebot_bison/config/migrations/632b8086bc2b_add_user_target.py b/nonebot_bison/config/migrations/632b8086bc2b_add_user_target.py
index 9a867ac..716aa22 100644
--- a/nonebot_bison/config/migrations/632b8086bc2b_add_user_target.py
+++ b/nonebot_bison/config/migrations/632b8086bc2b_add_user_target.py
@@ -7,6 +7,7 @@ Create Date: 2023-03-20 00:39:30.199915
 """
 import sqlalchemy as sa
 from alembic import op
+from sqlalchemy.dialects.postgresql import JSONB
 
 # revision identifiers, used by Alembic.
 revision = "632b8086bc2b"
@@ -19,7 +20,13 @@ def upgrade() -> None:
     # ### commands auto generated by Alembic - please adjust! ###
     with op.batch_alter_table("nonebot_bison_user", schema=None) as batch_op:
         batch_op.drop_constraint("unique-user-constraint", type_="unique")
-        batch_op.add_column(sa.Column("user_target", sa.JSON(), nullable=True))
+        batch_op.add_column(
+            sa.Column(
+                "user_target",
+                sa.JSON().with_variant(JSONB, "postgresql"),
+                nullable=True,
+            )
+        )
 
     # ### end Alembic commands ###
 
diff --git a/nonebot_bison/config/migrations/67c38b3f39c2_make_user_target_not_nullable.py b/nonebot_bison/config/migrations/67c38b3f39c2_make_user_target_not_nullable.py
index a08e20a..8d4daf1 100644
--- a/nonebot_bison/config/migrations/67c38b3f39c2_make_user_target_not_nullable.py
+++ b/nonebot_bison/config/migrations/67c38b3f39c2_make_user_target_not_nullable.py
@@ -7,7 +7,7 @@ Create Date: 2023-03-20 11:08:42.883556
 """
 import sqlalchemy as sa
 from alembic import op
-from sqlalchemy.dialects import sqlite
+from sqlalchemy.dialects.postgresql import JSONB
 
 # revision identifiers, used by Alembic.
 revision = "67c38b3f39c2"
@@ -16,11 +16,17 @@ branch_labels = None
 depends_on = None
 
 
+def jsonb_if_postgresql_else_json():
+    return sa.JSON().with_variant(JSONB, "postgresql")
+
+
 def upgrade() -> None:
     # ### commands auto generated by Alembic - please adjust! ###
     with op.batch_alter_table("nonebot_bison_user", schema=None) as batch_op:
         batch_op.alter_column(
-            "user_target", existing_type=sqlite.JSON(), nullable=False
+            "user_target",
+            existing_type=jsonb_if_postgresql_else_json(),
+            nullable=False,
         )
 
     # ### end Alembic commands ###
@@ -29,6 +35,10 @@ def upgrade() -> None:
 def downgrade() -> None:
     # ### commands auto generated by Alembic - please adjust! ###
     with op.batch_alter_table("nonebot_bison_user", schema=None) as batch_op:
-        batch_op.alter_column("user_target", existing_type=sqlite.JSON(), nullable=True)
+        batch_op.alter_column(
+            "user_target",
+            existing_type=jsonb_if_postgresql_else_json(),
+            nullable=True,
+        )
 
     # ### end Alembic commands ###