django.db.utils.DataError: value too long for type character varying(30). I am getting this error while migrating on heroku postgresql

Question:

The errors I am getting while migrating on PostgreSQL Heroku. Note: It is working fine on the local server.

Traceback (most recent call last):
      File "/app/manage.py", line 22, in <module>
        main()
      File "/app/manage.py", line 18, in main
        execute_from_command_line(sys.argv)
      File "/app/.heroku/python/lib/python3.9/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
        utility.execute()
      File "/app/.heroku/python/lib/python3.9/site-packages/django/core/management/__init__.py", line 413, in execute
        self.fetch_command(subcommand).run_from_argv(self.argv)
      File "/app/.heroku/python/lib/python3.9/site-packages/django/core/management/base.py", line 354, in run_from_argv
        self.execute(*args, **cmd_options)
      File "/app/.heroku/python/lib/python3.9/site-packages/django/core/management/base.py", line 398, in execute
        output = self.handle(*args, **options)
      File "/app/.heroku/python/lib/python3.9/site-packages/django/core/management/base.py", line 89, in wrapped
        res = handle_func(*args, **kwargs)
      File "/app/.heroku/python/lib/python3.9/site-packages/django/core/management/commands/migrate.py", line 244, in handle
        post_migrate_state = executor.migrate(
      File "/app/.heroku/python/lib/python3.9/site-packages/django/db/migrations/executor.py", line 117, in migrate
        state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
      File "/app/.heroku/python/lib/python3.9/site-packages/django/db/migrations/executor.py", line 147, in _migrate_all_forwards
        state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
      File "/app/.heroku/python/lib/python3.9/site-packages/django/db/migrations/executor.py", line 227, in apply_migration
        state = migration.apply(state, schema_editor)
      File "/app/.heroku/python/lib/python3.9/site-packages/django/db/migrations/migration.py", line 126, in apply
        operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
      File "/app/.heroku/python/lib/python3.9/site-packages/django/db/migrations/operations/fields.py", line 104, in database_forwards
        schema_editor.add_field(
      File "/app/.heroku/python/lib/python3.9/site-packages/django/db/backends/base/schema.py", line 522, in add_field
        self.execute(sql, params)
      File "/app/.heroku/python/lib/python3.9/site-packages/django/db/backends/base/schema.py", line 145, in execute
        cursor.execute(sql, params)
      File "/app/.heroku/python/lib/python3.9/site-packages/django/db/backends/utils.py", line 66, in execute
        return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
      File "/app/.heroku/python/lib/python3.9/site-packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
        return executor(sql, params, many, context)
      File "/app/.heroku/python/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
        return self.cursor.execute(sql, params)
      File "/app/.heroku/python/lib/python3.9/site-packages/django/db/utils.py", line 90, in __exit__
        raise dj_exc_value.with_traceback(traceback) from exc_value
      File "/app/.heroku/python/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
        return self.cursor.execute(sql, params)
    **django.db.utils.DataError: value too long for type character varying(30)**

there is no column with 30 lengths even tried migrating after deleting all data and still getting the same error.

This is the model of the project
models.py

    from django.db import models
    from django.contrib.auth.models import User
    from django.db.models.fields import AutoField
    from django.utils.timezone import now
    
    class pageinfo(models.Model):
        page_id=models.IntegerField(AutoField,primary_key=True);
        # thumbnail=models.ImageField(null=True,blank=True);
        channellink=models.URLField(null=True,default='#')
        logo= models.URLField(null=True,blank=True);
        youtube_link1=models.URLField(null=True,default='#')
        youtube_link2=models.URLField(null=True,default='#')
        title=models.CharField(max_length=150,null=True);
        display_title=models.CharField(max_length=150,null=True);
        subscriber=models.CharField(max_length=15,null=True);
        description=models.TextField(null=True)
        ratingtitle1=models.CharField(max_length=150,default='Course Depth')
        ratingtitle2=models.CharField(max_length=150,default='Language Clarity')
        ratingtitle3=models.CharField(max_length=150,default='How interactive videos are')
        ratingtitle4=models.CharField(max_length=150,default='Quality of Content')
    
    # Create your models here.
    class review(models.Model):
        # id=models.ForeignKey(pageinfo,on_delete=models.CASCADE,primary_key=True)
        comment=models.CharField(max_length=1000,null=True);
        type=models.CharField(max_length=120,null=False)
        username= models.ForeignKey(User,on_delete=models.CASCADE, null=True);
        timeStamp=models.DateTimeField(default=now)
        
    class rating(models.Model):
        # id=models.ForeignKey(pageinfo,on_delete=models.CASCADE,primary_key=True)
        rate=models.IntegerField();
        type=models.CharField(max_length=120,null=False)
        username= models.ForeignKey(User,on_delete=models.CASCADE,null=True);
        email=models.CharField(max_length=80,default='')
        timeStamp=models.DateTimeField(default=now)
    
    class languagerating(models.Model):
        # id=models.ForeignKey(pageinfo,on_delete=models.CASCADE,primary_key=True)
        rate=models.IntegerField();
        type=models.CharField(max_length=120,null=False)
        email=models.CharField(max_length=80,default='')
        username= models.ForeignKey(User,on_delete=models.CASCADE,null=True);
        timeStamp=models.DateTimeField(default=now)
    
    class interactionrating(models.Model):
        # id=models.ForeignKey(pageinfo,on_delete=models.CASCADE,primary_key=True)
        rate=models.IntegerField();
        type=models.CharField(max_length=120,null=False)
        email=models.CharField(max_length=80,default='')
        username= models.ForeignKey(User,on_delete=models.CASCADE,null=True);
        timeStamp=models.DateTimeField(default=now)
    
    
    
    class qualityrating(models.Model):
        # id=models.ForeignKey(pageinfo,on_delete=models.CASCADE,primary_key=True)
        rate=models.IntegerField();
        type=models.CharField(max_length=120,null=False)
        email=models.CharField(max_length=80,default='')
        username= models.ForeignKey(User,on_delete=models.CASCADE,null=True);
        timeStamp=models.DateTimeField(default=now)
    
    # class user_detai(models.Model):
    #   username=models.CharField(max_length=50);
    #   email=models.CharField(max_length=50)
    #   password=models.CharField( max_length=50)
        
    class Info(models.Model):
      name=models.CharField(max_length=40,default='')
      email=models.CharField(max_length=80, null=True, );
      comment=models.CharField(max_length=1000, null=True);

Asked By: Vaibhav Singh

||

Answers:

In your pageinfo model, it looks like you have

subscriber=models.CharField(max_length=15,null=True);

Try increasing the max_length for this field and re run your makemigrations and migrate command.

Answered By: Arun T

The error is due to already saved data in your database being longer than the given characters. You may want to look at the data and consider fixing it or whether the given characters are really the limit you want.

If you are maintaining history for the model then you also need to delete data in the history table.

Answered By: Shahid Malik