दूसरे उत्तर में जोड़ने के लिए, पहचानकर्ताओं की केस-संवेदीता (तालिका नाम और कॉलम नाम) के बारे में Postresql का व्यवहार है:
- यदि नाम उद्धृत नहीं किया गया है, तो इसे लोअरकेस में बदल दिया जाता है . अन्यथा, इसे अछूता छोड़ दिया जाता है।
- बाद में, एक केस सेंसिटिव मैच प्रयास किया गया है।
यह न केवल प्रश्नों के लिए, बल्कि स्कीमा हेरफेर के लिए भी लागू होता है; विशेष रूप से:टेबल निर्माण।
सुनहरा नियम है संगति:
<ब्लॉकक्वॉट>यदि आप पोर्टेबल एप्लिकेशन लिखना चाहते हैं तो आपको सलाह दी जाती है कि आप हमेशा किसी विशेष नाम को उद्धृत करें या इसे कभी भी उद्धृत न करें
पोस्ट की गई समस्या उत्पन्न हुई, शायद, क्योंकि टेबल और कॉलम नाम निर्माण के समय उद्धृत किए गए थे (इसलिए, उन्हें लोअरकेस में परिवर्तित नहीं किया गया था)। तो, अब उन्हें सभी प्रश्नों में उद्धृत (और केस-संवेदी) होना चाहिए।
आम तौर पर, सभी अपेक्षा के अनुरूप काम करते हैं।
db=# create table Xxx (id integer); -- unquoted, will be converted to lowercase
CREATE TABLE
db=# select * from xXx; -- this works ok
id
----
(0 rows)
db=# create table "Xxxx" (id integer); -- will be left untouched
CREATE TABLE
db=# select * from xxxx; -- bad
ERROR: relation "xxxx" does not exist
LINE 1: select * from xxxx;
db=# select * from Xxxx; -- bad
ERROR: relation "xxxx" does not exist
LINE 1: select * from Xxxx;
^
db=# select * from "Xxxx"; -- ok
id
----
(0 rows)
db=# \dt *xx*
List of relations
Schema | Name | Type | Owner
--------+------+-------+----------
public | Xxxx | table | postgres
public | xxx | table | postgres