Skip to content

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

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

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

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

2 participants