PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment déboguer :erreur interne, la transaction en cours est abandonnée, les commandes sont ignorées jusqu'à la fin du bloc de transaction

Dans la plupart des cas, cela signifie que le précédent Échec de l'exécution de l'instruction SQL. Dans ce cas, vous devez :

  1. Activer SQL journalisation , voir l'extrait suivant à coller dans settings.py

  2. Définir DEBUG=1 , ou SQL ne sera pas enregistré

  3. Exécutez à nouveau runserver , et vous devriez voir toutes les requêtes SQL dans la console

  4. Exécutez les dernières requêtes SQL directement dans votre base de données , vous devriez alors trouver les requêtes qui échouent, puis vous devriez pouvoir les déboguer - ou ouvrir une nouvelle question spécifique à la requête à l'origine du problème. Vous pouvez utiliser phpMyAdmin, ou directement un client CLI, ou n'importe quel client de base de données, pour exécuter les requêtes SQL une par une jusqu'à ce que vous trouviez celle qui a besoin d'amour.

Configuration de la journalisation SQL :

LOGGING = { 
   'version': 1,
   'disable_existing_loggers': True,
   'formatters': {
       'simple': {
           'format': '%(levelname)s %(message)s',
       },  
   },  
   'handlers': {
       'console':{
           'level':'DEBUG',
           'class':'logging.StreamHandler',
           'formatter': 'simple'
       },  
   },  
   'loggers': {
       'django': {
           'handlers': ['console'],
           'level': 'DEBUG',
       },  
   }   
}

Si cette configuration ne fournit aucune sortie de console supplémentaire avec runserver , alors n'hésitez pas à essayer exemple test_project de django-autocomplete-light :

  1. Lisez et collez les commandes d'installation dans /tmp

  2. Remplacez le répertoire par autocomplete_light_env/src/django-autocomplete-light/test_project

  3. Ouvrez test_project/settings.py , remplacez le LOGGING configuration par celle du dessus

  4. Exécutez le serveur et ouvrez votre navigateur

Votre console ressemblera à :

Validating models...

0 errors found
Django version 1.4.1, using settings 'test_project.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
DEBUG (0.001) SELECT "django_content_type"."id", "django_content_type"."name", "django_content_type"."app_label", "django_content_type"."model" FROM "django_content_type" WHERE ("django_content_type"."model" = taggable  AND "django_content_type"."app_label" = charfield_autocomplete ); args=('taggable', 'charfield_autocomplete')
DEBUG (0.000) 
        SELECT DISTINCT "tagging_tag".id, "tagging_tag".name
        FROM
            "tagging_tag"
            INNER JOIN "tagging_taggeditem"
                ON "tagging_tag".id = "tagging_taggeditem".tag_id
            INNER JOIN "charfield_autocomplete_taggable"
                ON "tagging_taggeditem".object_id = "charfield_autocomplete_taggable"."id"

        WHERE "tagging_taggeditem".content_type_id = 11

        GROUP BY "tagging_tag".id, "tagging_tag".name

        ORDER BY "tagging_tag".name ASC; args=[]