2012-01-07 28 views
5

Tôi đang di chuyển từ cơ sở dữ liệu SQLite thử nghiệm sang cơ sở dữ liệu PostgreSQL.Django và PostgreSQL - giá trị quá dài đối với loại ký tự khác nhau (512)

Tôi có một đối tượng mẫu được chèn vào trong cơ sở dữ liệu, đã làm việc trên SQLite nhưng lại cho tôi một lỗi trong PostgreSQL.

đoạn mã là:

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() 

Tôi nhận được một:

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

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

Các trường mô tả mô hình của tôi có 512 max char dài:

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

Nhưng có không có cách nào chuỗi đó vượt quá 512 byte.

Tôi đã đọc các bài đăng trước về lỗi này, một là đề cập đến mã hóa. Có vẻ như không phải vậy.

Tôi được lưu trữ trên Webfaction. Tôi tạo ra một cơ sở dữ liệu, với mã hóa utf-8, và tiến hành sử dụng syncdb. Syncdb làm việc hoàn hảo nhưng bây giờ chèn đối tượng này không thành công.

Ai đó có thể đưa ra một số đầu vào? Cảm ơn bạn.

Trả lời

4

Sau khi một số đào trong Django documentation:

lĩnh vực Character

Bất kỳ lĩnh vực được lưu trữ với các loại cột VARCHAR có họ max_length giới hạn trong 255 ký tự nếu bạn đang sử dụng độc đáo = True cho trường.

Mỏ nhấn mạnh. Bạn có unique=True cho trường này không? Đây là hạn chế của Django, PostgreSQL sẽ không bận tâm. Bạn có thể muốn chuyển sang kiểu dữ liệu text. TextField trong cách nói Django.


ý tưởng cũ:

user là một reserved word in PostgreSQL và bất kỳ tiêu chuẩn SQL. Không sử dụng nó làm tên cột.

Bạn có thể sử dụng nó, nếu bạn kèm theo dấu ngoặc kép, nhưng tránh xa sự điên rồ đó. Chỉ cần không sử dụng các từ dành riêng cho số nhận dạng. Không bao giờ.

Cũng ...

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

Bất kỳ lý do cụ thể tại sao motor_trendcars không được niêm yết như các giá trị khác? Các khóa ngoại, như @Ignacio nhận xét?

+0

Vì chúng là khóa ngoại. Và ORM của Django có thể trích dẫn các tên trường đúng cách. –

+0

Có, đó là những biến Django được xác định trước đó, một số chuỗi, các đối tượng khác. Tuy nhiên, điều này có liên quan đến vấn đề mô tả không? Thực tế là tôi có một trường người dùng gây ra sự cố mô tả? –

+0

@VascoPatricio: Không có kết nối rõ ràng cho vấn đề, không. Vì không có gì rõ ràng, tôi đang săn lùng bất cứ điều gì đáng ngờ. Tôi đào sâu vào sách hướng dẫn và nghĩ rằng tôi đã tìm được thứ gì đó ngay bây giờ. Sửa đổi câu trả lời của tôi, có một cái nhìn. –

Các vấn đề liên quan