Index: django/db/backends/postgresql/base.py
===================================================================
--- django/db/backends/postgresql/base.py	(revision 7397)
+++ django/db/backends/postgresql/base.py	(working copy)
@@ -60,16 +60,16 @@
         return iter(self.cursor)
 
 class DatabaseFeatures(BaseDatabaseFeatures):
-    pass # This backend uses all the defaults.
+    needs_upper_for_iops = True
 
 class DatabaseWrapper(BaseDatabaseWrapper):
     features = DatabaseFeatures()
     ops = DatabaseOperations()
     operators = {
         'exact': '= %s',
-        'iexact': 'ILIKE %s',
+        'iexact': '= UPPER(%s)',
         'contains': 'LIKE %s',
-        'icontains': 'ILIKE %s',
+        'icontains': 'LIKE UPPER(%s)',
         'regex': '~ %s',
         'iregex': '~* %s',
         'gt': '> %s',
@@ -78,8 +78,8 @@
         'lte': '<= %s',
         'startswith': 'LIKE %s',
         'endswith': 'LIKE %s',
-        'istartswith': 'ILIKE %s',
-        'iendswith': 'ILIKE %s',
+        'istartswith': 'LIKE UPPER(%s)',
+        'iendswith': 'LIKE UPPER(%s)',
     }
 
     def _cursor(self, settings):
Index: django/db/backends/postgresql_psycopg2/base.py
===================================================================
--- django/db/backends/postgresql_psycopg2/base.py	(revision 7397)
+++ django/db/backends/postgresql_psycopg2/base.py	(working copy)
@@ -22,6 +22,7 @@
 
 class DatabaseFeatures(BaseDatabaseFeatures):
     needs_datetime_string_cast = False
+    needs_upper_for_iops = True
 
 class DatabaseOperations(PostgresqlDatabaseOperations):
     def last_executed_query(self, cursor, sql, params):
@@ -35,9 +36,9 @@
     ops = DatabaseOperations()
     operators = {
         'exact': '= %s',
-        'iexact': 'ILIKE %s',
+        'iexact': '= UPPER(%s)',
         'contains': 'LIKE %s',
-        'icontains': 'ILIKE %s',
+        'icontains': 'LIKE UPPER(%s)',
         'regex': '~ %s',
         'iregex': '~* %s',
         'gt': '> %s',
@@ -46,8 +47,8 @@
         'lte': '<= %s',
         'startswith': 'LIKE %s',
         'endswith': 'LIKE %s',
-        'istartswith': 'ILIKE %s',
-        'iendswith': 'ILIKE %s',
+        'istartswith': 'LIKE UPPER(%s)',
+        'iendswith': 'LIKE UPPER(%s)',
     }
 
     def _cursor(self, settings):
