Skip to content

fix(sessions): use PostgreSQL JSON instead of JSONB for DynamicJSON - #7857

Closed
ninglinLiu wants to merge 14 commits into
google:mainfrom
ninglinLiu:fix/postgres-dynamic-json-not-jsonb-7854
Closed

ninglinLiu wants to merge 14 commits into
google:mainfrom
ninglinLiu:fix/postgres-dynamic-json-not-jsonb-7854

Conversation

@ninglinLiu

Copy link
Copy Markdown
Contributor

Description

DynamicJSON used postgresql.JSONB for PostgreSQL. JSONB reorders object keys, coerces large floats (e.g. 1e23) to ints, turns -0.0 into 0.0, and rejects NUL (\x00) in strings — so DatabaseSessionService round-trips differ from SQLite, which stores json.dumps text.

Switch the dialect type to postgresql.JSON, which preserves input the same way the issue reports.

Note for existing deployments: tables already created with JSONB keep that storage until altered (e.g. ALTER ... TYPE json). New creates get json.

Test plan

  • Updated test_schemas_shared expectations for postgresql.JSON
  • tests/unittests/sessions/test_schemas_shared.py — 19 passed

Fixes #7854

JSONB reorders object keys, coerces large floats to ints, turns -0.0
into 0.0, and rejects NUL in strings, so DatabaseSessionService round-
trips differ from SQLite. Use the json column type so PostgreSQL keeps
values like the TEXT path does.

Fixes google#7854
copybara-service Bot pushed a commit that referenced this pull request Nov 3, 2026
Merge #7857

DynamicJSON now creates PostgreSQL columns as `json` instead of `jsonb`, so
state and event values keep key order, floats such as `-0.0` and `1e23`, and
NUL characters, as on SQLite. Only newly created tables change; existing
`jsonb` tables are not altered and still read and write; the PostgreSQL
sample README shows how to convert them. Queries outside ADK
that use jsonb-only operators or GIN indexes will not work on new tables.

Part of #7854

PiperOrigin-RevId: 1013154584
@adk-bot

adk-bot commented Nov 3, 2026

Copy link
Copy Markdown
Collaborator

Thank you @ninglinLiu for your contribution! 🎉

Your changes have been successfully imported and merged via Copybara in commit d487c53.

Closing this PR as the changes are now in the main branch.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merged [Status] This PR is merged

Projects

None yet

Development

Successfully merging this pull request may close these issues.

DatabaseSessionService on PostgreSQL changes state values and can't store a NUL

3 participants