title: Django ProgrammingError in Fields on PostgreSQL
body: <h2>models.py</h2>
  
  <pre><code>class Stop(models.Model):
      idn = models.PositiveIntegerField(primary_key=True, unique=True)
      label = models.CharField(null=False, blank=False, max_length=512)
      coor_x = models.FloatField()
      coor_y = models.FloatField()
      buses = models.ManyToManyField(Bus)
      latest_query_datetime = models.DateTimeField(default=datetime(2000, 1, 1, 0, 0, 0))
      latest_query_data = JSONField(default={})
  
      class Meta:
      ordering = ["label"]
  
      def __str__(self):
      return self.label
  </code></pre>
  
  <p>When I run:</p>
  
  <pre><code>python3 manage.py makemigrations &amp;&amp; python3 manage.py migrate
  </code></pre>
  
  <p>It raises a <code>ProgrammingError</code> saying that jsonb datatype does not exist:</p>
  
  <pre><code>Migrations for 'rest':
    0007_auto_20160612_1301.py:
      - Alter field latest_query_data on stop
  Operations to perform:
    Apply all migrations: contenttypes, rest, auth, sessions, admin
  Running migrations:
    Rendering model states... DONE
    Applying rest.0005_auto_20160612_1237...Traceback (most recent call last):
    File "/home/erayerdin/.venv/eshot-api/lib/python3.5/site-packages/django/db/backends/utils.py", line 64, in execute
      return self.cursor.execute(sql, params)
  psycopg2.ProgrammingError: type "jsonb" does not exist
  LINE 1: ... TABLE "rest_stop" ADD COLUMN "latest_query_data" jsonb DEFA...
                                                           ^
  
  
  The above exception was the direct cause of the following exception:
  
  Traceback (most recent call last):
    File "manage.py", line 10, in &lt;module&gt;
      execute_from_command_line(sys.argv)
    File "/home/erayerdin/.venv/eshot-api/lib/python3.5/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
      utility.execute()
    File "/home/erayerdin/.venv/eshot-api/lib/python3.5/site-packages/django/core/management/__init__.py", line 345, in execute
      self.fetch_command(subcommand).run_from_argv(self.argv)
    File "/home/erayerdin/.venv/eshot-api/lib/python3.5/site-packages/django/core/management/base.py", line 348, in run_from_argv
      self.execute(*args, **cmd_options)
    File "/home/erayerdin/.venv/eshot-api/lib/python3.5/site-packages/django/core/management/base.py", line 399, in execute
      output = self.handle(*args, **options)
    File "/home/erayerdin/.venv/eshot-api/lib/python3.5/site-packages/django/core/management/commands/migrate.py", line 200, in handle
      executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
    File "/home/erayerdin/.venv/eshot-api/lib/python3.5/site-packages/django/db/migrations/executor.py", line 92, in migrate
      self._migrate_all_forwards(plan, full_plan, fake=fake, fake_initial=fake_initial)
    File "/home/erayerdin/.venv/eshot-api/lib/python3.5/site-packages/django/db/migrations/executor.py", line 121, in _migrate_all_forwards
      state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
    File "/home/erayerdin/.venv/eshot-api/lib/python3.5/site-packages/django/db/migrations/executor.py", line 198, in apply_migration
      state = migration.apply(state, schema_editor)
    File "/home/erayerdin/.venv/eshot-api/lib/python3.5/site-packages/django/db/migrations/migration.py", line 123, in apply
      operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
    File "/home/erayerdin/.venv/eshot-api/lib/python3.5/site-packages/django/db/migrations/operations/fields.py", line 62, in database_forwards
      field,
    File "/home/erayerdin/.venv/eshot-api/lib/python3.5/site-packages/django/db/backends/base/schema.py", line 396, in add_field
      self.execute(sql, params)
    File "/home/erayerdin/.venv/eshot-api/lib/python3.5/site-packages/django/db/backends/base/schema.py", line 110, in execute
      cursor.execute(sql, params)
    File "/home/erayerdin/.venv/eshot-api/lib/python3.5/site-packages/django/db/backends/utils.py", line 79, in execute
      return super(CursorDebugWrapper, self).execute(sql, params)
    File "/home/erayerdin/.venv/eshot-api/lib/python3.5/site-packages/django/db/backends/utils.py", line 64, in execute
      return self.cursor.execute(sql, params)
    File "/home/erayerdin/.venv/eshot-api/lib/python3.5/site-packages/django/db/utils.py", line 95, in __exit__
      six.reraise(dj_exc_type, dj_exc_value, traceback)
    File "/home/erayerdin/.venv/eshot-api/lib/python3.5/site-packages/django/utils/six.py", line 685, in reraise
      raise value.with_traceback(tb)
    File "/home/erayerdin/.venv/eshot-api/lib/python3.5/site-packages/django/db/backends/utils.py", line 64, in execute
      return self.cursor.execute(sql, params)
  django.db.utils.ProgrammingError: type "jsonb" does not exist
  LINE 1: ... TABLE "rest_stop" ADD COLUMN "latest_query_data" jsonb DEFA...
  </code></pre>
  
  <p>I use PostgreSQL to use JSONField and update it when a user requests a view. If I do not use <code>default={}</code>, it tells me to make one.</p>
  
  <h2>Further Analysis</h2>
  
  <p>I changed <code>latest_query_data</code> field to <code>TextField</code> so that I can store as string and convert to <code>dict</code> when I need. However, this also raised the same error.</p>
  
  <hr>
  
  <h1>Environment</h1>
  
  <ul>
  <li>django 1.9.6</li>
  <li>psycopg 2.6.1</li>
  </ul>