2012-06-05 36 views
19

Tôi đã làm điều này trong psql:Hạn chế tên cột của bảng Postgres?

CREATE TABLE IF NOT EXISTS apiss (skey TEXT, time INTEGER, user TEXT, ip TEXT); 

tôi nhận được

ERROR: syntax error at or near "user" LINE 1: ...BLE IF NOT EXISTS apiss (skey TEXT, time INTEGER, user TEXT,... 

tôi làm:

CREATE TABLE IF NOT EXISTS apiss (skey TEXT, time INTEGER, userd TEXT, ip TEXT); 

Nó hoạt động.
Lưu ý userd thay vì người dùng.

Có một số hạn chế về tên cột mà bảng có thể có không?
(Postgressql v9.1.3)

Trả lời

40

Dưới đây là một bảng tốt đẹp của từ dành riêng trong PostgreSQL:
http://www.postgresql.org/docs/current/static/sql-keywords-appendix.html

Nó có lẽ là tốt nhất để chỉ cần tránh sử dụng các từ như Bảng- hoặc cột tên.
Một thay thế, tuy nhiên, là để kèm các định danh trong hai dấu ngoặc kép, ví dụ .:

CREATE TABLE IF NOT EXISTS apiss (
    skey TEXT, 
    time INTEGER, 
    "user" TEXT, 
    ip TEXT); 
+34

Để diễn giải Yoda, "Nếu bạn sử dụng số nhận dạng được trích dẫn, họ sẽ thống trị số phận của bạn mãi mãi". Các số nhận dạng được trích dẫn là đúng nỗi đau để sử dụng, đặc biệt là được trộn lẫn với không được trích dẫn. Như OP nói, tốt nhất là tránh chúng hoàn toàn. –

17

Trong công ty của tôi, tôi đã để quét toàn bộ cơ sở dữ liệu cho từ dành riêng. Tôi đã giải quyết công việc với sự giúp đỡ của

select * from pg_get_keywords() 
+0

tốt cho các phiên bản khác nhau – Rodrigo

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