Nếu cột trong bảng của Postgres có tên year
, làm thế nào nên tìm INSERT
truy vấn để đặt giá trị cho cột đó?
Ví dụ: INSERT INTO table (id, name, year) VALUES ( ... );
đưa ra một lỗi gần từ năm .
Nếu cột trong bảng của Postgres có tên year
, làm thế nào nên tìm INSERT
truy vấn để đặt giá trị cho cột đó?
Ví dụ: INSERT INTO table (id, name, year) VALUES ( ... );
đưa ra một lỗi gần từ năm .
Câu trả lời:
Chỉ cần đặt year
trong dấu ngoặc kép để ngăn nó được hiểu là một từ khóa :
INSERT INTO table (id, name, "year") VALUES ( ... );
Từ tài liệu :
Có một loại định danh thứ hai: định danh phân cách hoặc định danh được trích dẫn. Nó được hình thành bằng cách đặt một chuỗi các ký tự tùy ý trong dấu ngoặc kép ("). Một định danh được phân tách luôn là một định danh, không bao giờ là một từ khóa. Vì vậy," select "có thể được sử dụng để chỉ một cột hoặc bảng có tên" select ", trong khi đó một lựa chọn không được trích dẫn sẽ được coi là một từ khóa và do đó sẽ gây ra lỗi phân tích cú pháp khi được sử dụng trong trường hợp tên bảng hoặc cột được dự kiến.
update "user" set "password" = 'value...';
hoạt động hoàn toàn tốt ...
Nếu bạn không cung cấp dấu ngoặc kép trong bất kỳ Trường / Cột nào, nó sẽ được Postgres hạ thấp theo mặc định. Và Postgres sẽ bỏ qua việc kiểm tra từ khóa khi nói đến tên cột.
Trong trường hợp của bạn, tôi không nghĩ rằng bắt buộc phải thêm dấu ngoặc kép khi nói đến columns
. Nhưng nếu bạn đang sử dụng keywords
(đăng ký bởi Postgres) như tên của Table
, Schema
, Function
hoặc Trigger
vv, bạn phải có để sử dụng dấu ngoặc kép hoặc đôi, hoặc bạn có thể chỉ định tên schema với dấu chấm nối.
Giả sử, thứ tự là từ khóa được đăng ký bởi Postgres. Và trong một số trường hợp, bạn phải sử dụng từ khóa này làm tên bảng.
Vào thời điểm đó, Postgres sẽ cho phép bạn tạo một bảng với keywords
. Đó là vẻ đẹp của Postgres.
Để truy cập bảng thứ tự, bạn phải sử dụng dấu ngoặc kép hoặc bạn có thể đặt tên lược đồ trước tên bảng.
VÍ DỤ
1.
select * from schema_name.order;
2.
select * from "order";
Tương tự như vậy, bạn có thể sử dụng loại kết hợp này. Hy vọng điều này sẽ giúp bạn.
MyTable
,myTable
vàmytable
chỉ là như nhau. Với các trích dẫn này gấp không được thực hiện. Vì vậy,"MyTable"
không còn giống nhưmytable
.