2012-01-07 12 views
5

Sto migrando da un database SQLite di prova a un database PostgreSQL.Django e PostgreSQL - valore troppo lungo per il tipo di carattere che varia (512)

Ho un oggetto campione che è inserito nel database, che ha funzionato su SQLite ma mi sta dando un errore in PostgreSQL.

Codice frammento è:

car = CarItem.objects.create(
    user = motor_trend, 
    name = 'Camaro 2010', 
    category = cars, 
    condition = 'Used', 
    price = '28,547.00', 
    production_year = '2010', 
    color_interior = 'Black', 
    color_exterior = 'Inferno Orange Metallic', 
    reference = 'PRC17288', 
    location_of_creation = 'Undisclosed', 
    location_current = 'Columbus, OH, USA', 
    description = 'GORGEOUS ORANGE SS!!', 
) 
car.save() 

sto ottenendo un:

DatabaseError at /create/ 
value too long for type character varying(512) 

Traceback 
(...) 
    description = 'GORGEOUS ORANGE SS!!', 
(...) 

La descrizione campo del mio modello ha una 512 lunghezza massima char:

description = models.CharField(max_length=512,default='') 

Ma c'è nessun modo in cui la stringa supera i 512 byte.

Ho letto post precedenti su questo errore, uno che si riferisce alla codifica. Non sembra essere il caso.

Sono ospitato su Webfaction. Ho creato un database, con la codifica utf-8, e ho proceduto a usare syncdb. Syncdb ha funzionato perfettamente ma ora questo inserimento di oggetti fallisce.

Qualcuno può dare qualche input? Grazie.

risposta

4

Dopo un po 'scavare nelle Django documentation:

campi di carattere

Tutti i campi che sono memorizzati con tipi di colonna VARCHAR hanno il loro max_length limitato a 255 caratteri se si utilizza unica = True per il campo.

Enfasi mia. Hai unique=True per il campo? Questa è una restrizione di Django, PostgreSQL non mi dispiacerebbe. Potresti voler passare al tipo di dati text. TextField nel linguaggio di Django.


vecchie idee:

user è un reserved word in PostgreSQL e qualsiasi standard SQL. Non usarlo come nome della colonna.

È possibile utilizzarlo, se lo si racchiude tra virgolette doppie, ma stare lontano da quella follia. Basta non usare parole riservate per identificatori. Mai.

anche ...

user = motor_trend, 
name = 'Camaro 2010', 
category = cars, 

Qual è il motivo particolare per cui motor_trend e cars non siano quotati come gli altri valori? Chiavi esterne, come ha commentato @Ignacio?

+0

Perché sono chiavi esterne. E l'ORM di Django probabilmente riporta correttamente i nomi dei campi. –

+0

Sì, quelle sono le variabili Django definite in precedenza, alcune stringhe, altri oggetti. Tuttavia, questo è legato al problema di descrizione? Il fatto è che ho un campo utente che causa il problema di descrizione? –

+0

@VascoPatricio: Nessuna connessione ovvia al problema, no. Poiché non c'era nulla di ovvio, cercavo qualcosa di sospetto. Ho scavato nel manuale e penso di aver trovato qualcosa ora. Modificata la mia risposta, dai un'occhiata. –

Problemi correlati