Opened 11 years ago

Closed 11 years ago

#5086 closed (fixed)

testing on postgres_psycopg2 tries to truncate tsearch2 tables

Reported by: shaunc <shaun@…> Owned by: Adrian Holovaty
Component: Database layer (models, ORM) Version: master
Severity: Keywords:
Cc: shaun@… Triage Stage: Unreviewed
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no


I'm using tsearch2 together with django. Tsearch2 adds some special tables to the template database which are automatically created in each new database. So they don't get mixed up or deleted, I leave the user as "postgres" -- not owned by the user that django connects via.

This works fine... except that during testing the (django) test cases "truncate" all tables including the tsearch2 tables. These tables shouldn't be truncated, and (since django is not the owner to prevent just this sort of thing) the command fails.

I have solved in patch by having django.db.backends.postgresql_psychopg2.introspection.get_table_list return by default only tables that are owned by the current_user. I think this is a reasonable default in general, because other tables are likely to be not the concern of django anyway.

  • Shaun Cutts

Attachments (1)

owned-tables-only.patch (1.3 KB) - added by shaunc <shaun@…> 11 years ago.
patch of ...introspection.get_table_list, returning by default only tables owned by current user

Download all attachments as: .zip

Change History (4)

Changed 11 years ago by shaunc <shaun@…>

Attachment: owned-tables-only.patch added

patch of ...introspection.get_table_list, returning by default only tables owned by current user

comment:1 Changed 11 years ago by Yuri Baburov <burchik@…>

Summary: testing on postgres_psychopg2 tries to truncate tsearch2 tablestesting on postgres_psycopg2 tries to truncate tsearch2 tables

Thanks! And what if my tsearch2 tables are owned by the same user like anything else?

comment:2 Changed 11 years ago by Adrian Holovaty

I agree that Django should not be truncating -- or even *touching* -- the tsearch2 tables. But I would even go as far as to say that Django should not touch *any* tables that it doesn't know about, regardless of which user account the table was created under.

I will change this so that Django doesn't touch tables that aren't defined in models.

comment:3 Changed 11 years ago by Adrian Holovaty

Resolution: fixed
Status: newclosed

(In [6013]) Fixed #5086 -- The 'flush' and 'sqlflush' management commands no longer touch tables that Django is not aware of (tables that are not in INSTALLED_APPS and/or do not have associated models. Thanks for bringing this up, shaun@…

Note: See TracTickets for help on using tickets.
Back to Top