không thể làm cho chèn PostgreSQL đơn giản hoạt động


82

Tôi đang cố thực hiện một thao tác chèn đơn giản vào bảng postgres nhưng gặp lỗi rằng giá trị tôi đang cố chèn đang được hiểu là tên cột

INSERT INTO "imageTagBusinessMainCategory"
(id, businessMainCategory)
VALUES
(DEFAULT, "auto dealer")

Trong đó id được thiết lập để làm khóa chính và tự động tăng, chứ không phải rỗng. Đó là những ô tôi đã đánh dấu khi thiết lập bảng trong phpPgAdmin.

Tôi gặp lỗi này mặc dù:

ERROR: ERROR: column "auto dealer" does not exist
Query = INSERT
INTO "imageTagBusinessMainCategory"
(id, businessMainCategory)
VALUES
(DEFAULT,
"auto dealer")

Tôi đã đặt tên bảng của mình trong dấu ngoặc kép, khi đọc đến đây tôi nên làm như vậy.

Và được sử dụng DEFAULTđể tự động tăng id như tôi đã đọc ở đây, tôi nên làm.

Có ý kiến ​​gì không? Cảm ơn!


13
sử dụng các dấu ngoặc kép cho 'đại lý ô tô'.
muratgu

2
Dấu nháy đơn. Để lại id.
Paul Tomblin

@muratgu mắc lỗi:ERROR: ERROR: syntax error at or near "'imageTagBusinessMainCategory'" Position: 13
1252748 14/09/12

@PaulTomblin ý bạn là "bỏ id" ra sao? Cảm ơn!
1252748 14/09/12

Ý tôi là nó thể hiện trong câu trả lời của @ Randy. Ngoại trừ có vẻ như bạn cũng cần dấu ngoặc kép xung quanh tên cột.
Paul Tomblin

Câu trả lời:


165

Sử dụng 'auto dealer'thay thế. PostgreSQL được hiểu "là dấu ngoặc kép cho số nhận dạng, 'là dấu ngoặc kép cho chuỗi.

Cũng thế:

  • Nếu đây là một dự án mới, chỉ cần không sử dụng các bảng trường hợp hỗn hợp; nó là một nguồn thất vọng sau này. Thay vì có thể sử dụng bất kỳ trường hợp nào trong câu lệnh SQL của bạn, bạn phải trích dẫn cả tên mã định danh và viết đúng trường hợp.

  • Không cần phải chỉ định id/ DEFAULT, bạn đang yêu cầu nó làm những gì nó đã làm. Tôi chưa gặp DBMS yêu cầu bạn bao gồm columnName/ DEFAULTnếu bạn muốn nó đặt giá trị mặc định trong cột, vì vậy tôi không nghĩ rằng cặp KV bổ sung này sẽ làm cho những gì đang xảy ra rõ ràng hơn cho bất kỳ ai đọc mã của bạn sau này .


mà mang lại cho tôi lỗi nàyERROR: ERROR: column "businessmaincategory" of relation "imageTagBusinessMainCategory" does not exist
1252748

1
Có thể bạn đã tạo cột trong trường hợp hỗn hợp, giống như tên bảng. Bạn cũng phải trích dẫn tên cột nếu trường hợp này xảy ra. Ngừng sử dụng trường hợp hỗn hợp trong đặt tên, và bạn sẽ giúp mọi người đỡ đau đớn.
Matt

@Matt Tôi đang gặp phải vấn đề tương tự và việc cố gắng sử dụng pg với C ++ thật là khó khăn khi tôi phải nhập những dấu ngoặc kép đó. Không có cách giải quyết nào giống như một số cài đặt có thể loại bỏ sự cần thiết của những câu trích dẫn này?
itols

@itsols Fist đạn của "Cũng" sẽ loại bỏ sự cần thiết của các dấu ngoặc kép; chỉ xác định danh tính của bạn bằng cách sử dụng [a-z0-9] và không chỉ định chúng có bất kỳ trường hợp cụ thể nào (xác định mà không cần trích dẫn). Sau đó, bạn có thể tham khảo chúng theo cách bạn muốn mà không cần dấu ngoặc kép mãi mãi. Nếu bạn hoặc ai đó quyết định rằng việc đặt tên bảng có dấu cách hoặc trong trường hợp lạc đà là thực sự quan trọng, hãy vui vẻ trích dẫn ở mọi nơi!
Matt,

Matt đã thực hiện tốt ... Tôi đoán tôi vừa mới làm quen với CamelCase theo một cách nào đó - đã lâu (hơn 20 năm) ... Thực ra vấn đề không nằm ở việc trích dẫn kép (vâng, nó sẽ dễ dàng hơn không có nó), nhưng nỗi đau thực sự là phải thoát khỏi chúng bằng dây. Tôi đã không thấy điều này xảy ra cho đến khi tôi đặt C ++ và pg lại với nhau. Cảm ơn dù sao cho đầu vào của bạn!
itols,

9
INSERT INTO "imageTagBusinessMainCategory"
("businessMainCategory")
VALUES
('auto dealer')

CHỈNH SỬA: Đã thêm dấu ngoặc kép xung quanh tên cột


1
Xin chào, cảm ơn. cung cấp cho lỗi này:ERROR: ERROR: column "businessmaincategory" of relation "imageTagBusinessMainCategory" does not exist
1252748

Có vẻ như bạn cũng cần đặt tên cột trong dấu ngoặc kép. Một lý do tại sao tên bảng dạng chữ hoa hỗn hợp trong PostgreSQL là một ý tưởng tồi.
David Faber

@DavidFaber vâng, bạn nói đúng. làm cho nó hơi khó đọc mặc dù .. tôi có thể sử dụng dấu gạch ngang không? ^^
1252748 14/09/12

1
@DavidFaber: Cá nhân tôi nghĩ định rằng nhu cầu trích dẫn (ví dụ trường hợp hỗn hợp) là một ý tưởng tồi trong bất kỳ DBMS
a_horse_with_no_name

1
Hãy nhớ rằng ở mọi nơi NGOẠI TRỪ khi tạo số nhận dạng, bạn có thể tham chiếu đến nó trong trường hợp hỗn hợp và không có dấu ngoặc kép. Vì vậy, bảng có tên thishasareallylongnamecó thể được truy cập bằng cách sử dụng select * from thisHasAReallyLongName.
Matt

4

Postgres, Oracle, v.v. mong đợi tên cột nằm trong dấu ngoặc kép nếu chúng có chữ hoa và thường. Vì vậy, hãy tạo một quy ước về tất cả các chữ viết hoa nhỏ hoặc tất cả các cột trong bảng của bạn hoặc sử dụng dấu ngoặc kép như David Faber đã đề xuất

INSERT INTO "imageTagBusinessMainCategory"
("businessMainCategory")
VALUES
('auto dealer')
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.