Thoát tên cột giống như từ khóa trong Postgres


134

Nếu cột trong bảng của Postgres có tên year, làm thế nào nên tìm INSERTtruy 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:


210

Chỉ cần đặt yeartrong 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.


44
Một số cảnh báo: Không có dấu ngoặc kép, PostgreSQL sẽ gấp tất cả các định danh thành chữ thường. MyTable, myTablemytablechỉ 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.
AH

19
Tốt hơn hết, hãy cố gắng sử dụng các từ dành riêng hoặc trường hợp hỗn hợp làm định danh và bạn sẽ không bao giờ phải sử dụng dấu ngoặc kép hoặc nhận thông báo lỗi lạ.
Erwin Brandstetter


8
@ErwinBrandstetter Vấn đề là khi bạn làm việc trên một dự án đã thành lập.
ceruleus

5
@ HoàngLong đúng vậy. update "user" set "password" = 'value...';hoạt động hoàn toàn tốt ...
Phill

0

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, Functionhoặc Triggervv, 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.

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.