summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShai Berger <shai@platonix.com>2013-10-21 18:12:48 +0300
committerShai Berger <shai@platonix.com>2013-10-23 15:05:05 +0300
commit6de3726423b8df4fb8ab05caa109a8c6308e6060 (patch)
tree5efe99bc3ec07fc921b5ad914fb6c67e485c7159
parentead7c496a4bdd0eb8e2282ce982e1292846e7c91 (diff)
Fixed #13245: Explained Oracle's behavior w.r.t db_table
and how to prevent table-name truncation Thanks russellm & timo for discussion, and timo for review. Backported from master 317040a73b77be8f8210801793b2ce6d1a69301e
-rw-r--r--docs/ref/databases.txt16
-rw-r--r--docs/ref/models/options.txt12
2 files changed, 28 insertions, 0 deletions
diff --git a/docs/ref/databases.txt b/docs/ref/databases.txt
index dba278bc4f..4c18658304 100644
--- a/docs/ref/databases.txt
+++ b/docs/ref/databases.txt
@@ -705,6 +705,22 @@ Naming issues
Oracle imposes a name length limit of 30 characters. To accommodate this, the
backend truncates database identifiers to fit, replacing the final four
characters of the truncated name with a repeatable MD5 hash value.
+Additionally, the backend turns database identifiers to all-uppercase.
+
+To prevent these transformations (this is usually required only when dealing
+with legacy databases or accessing tables which belong to other users), use
+a quoted name as the value for ``db_table``::
+
+ class LegacyModel(models.Model):
+ class Meta:
+ db_table = '"name_left_in_lowercase"'
+
+ class ForeignModel(models.Model):
+ class Meta:
+ db_table = '"OTHER_USER"."NAME_ONLY_SEEMS_OVER_30"'
+
+Quoted names can also be used with Django's other supported database
+backends; except for Oracle, however, the quotes have no effect.
When running syncdb, an ``ORA-06552`` error may be encountered if
certain Oracle keywords are used as the name of a model field or the
diff --git a/docs/ref/models/options.txt b/docs/ref/models/options.txt
index 9d076f6274..9767ea5f1b 100644
--- a/docs/ref/models/options.txt
+++ b/docs/ref/models/options.txt
@@ -67,6 +67,18 @@ Django quotes column and table names behind the scenes.
the table name via ``db_table``, particularly if you are using the MySQL
backend. See the :ref:`MySQL notes <mysql-notes>` for more details.
+.. admonition:: Table name quoting for Oracle
+
+ In order to to meet the 30-char limitation Oracle has on table names,
+ and match the usual conventions for Oracle databases, Django may shorten
+ table names and turn them all-uppercase. To prevent such transformations,
+ use a quoted name as the value for ``db_table``::
+
+ db_table = '"name_left_in_lowercase"'
+
+ Such quoted names can also be used with Django's other supported database
+ backends; except for Oracle, however, the quotes have no effect. See the
+ :ref:`Oracle notes <oracle-notes>` for more details.
``db_tablespace``
-----------------