41
Идентификаторлар мен кілттік сөздер әріппен (a-z, алайда латындық
емес әріптер мен диакритиктік белгілермен әріптер жіберіледі) немесе
астынғы белгілеуден (_) басталу керек. Идентификатор немесе кілттік сөздегі
келесі таңбалар әріпттер, сандар (0-9), доллар белгісі ($) немесе астынғы
белгілеу болуы мүмкін. Байқалайтын нәрсе, SQL әріп стандартын қатаң
қаралса, доллар белгісін идентификаторда қолдануға болмайды, сол себептен
олардың қолдануы құрылым ұтқырдығына зиян келтіреді. SQL стандартында
кепілді түрде сандары бар және астынғы белгілеумен бітетін кілттік сөздер
болмайды, сол себептен осындай түрдегі идентификаторлар болашақтағы
мүмкін
кеңейтулермен
болатын
қақтығыстардан
қорғалған.
Жүйе
идентификаторларға NAMEDATALEN-1 аспайтын байт орын береді, ал
ұзынырақ аттар қысқартылады. Әдепкі бойынша, NAMEDATALEN 64 тең,
сондықтан идентификатор максималды ұзындығы 63 байтқа тең. Егер
жеткіліксіз болған жағдайда, бұл шекті src/include/pg_config_manual.h.
файлында NAMEDATALEN константасын өзгертіп көбейтуге болады.
Бағыдағы кілттік сөздер мен идентификаторлар жүйемен регистр есебінсіз
қабылданады.
Осылайша:
UPDATE MY_TABLE SET A = 5;
жазбасы келесі жазбаға тең:
uPDaTE my_TabLE SeT a = 5;
Кілттік сөздерді үлкен әріптермен жазу жиі ресми емес келісілген, ал
аттарды кіші әріптенмен:
UPDATE my_table SET a = 5;
Идентификаторлардың басқа типі бар: бөлінген идентификаторлар мен
бағымдағы идентификаторлар. Олар қарапайым таңбаларды екі бағымға (")
алған жағдайда пайда болады. Осындай түрдегі идентификаторлар әрдайым
идентификатор ретінде саналады, бірақ кілттік сөз ретінде емес. Осылай
"select" баған белгілеуі немесе «select» кестесі ретінде қолдануға болады, ад
бағымсыз select кілттік сөз ретінде қабылданады және команданы
бөлшектегенде кесте немесе баған аты күтілетін жерде қателікке алып келеді.
Дәл сол мысалды келесі түрде бағымдағы идентификатормен қайта жазуға
болады:
UPDATE "my_table" SET "a" = 5;
Бағымдағы идентификаторларда тек 0 кодты таңбадан басқа кез келген
таңба болуы мүмкін. (Осындай идентификаторға бағым қосу үшін оны көшіру
керек. ) Бұл басқа жолмен мүмкін болмаған аттары бар кестелер мен
бағандарды құруға мүмкіндік жасайды, мысалы, бос орындары немесе
амперсандар бар. Сонымен қатар ұзындық шектеуі сақталады. Бағымдағы
идентификатордың тағы бір нұсқасы Unicode таңбаларын коды бойынша
қолдануға мүмкіндік береді. Осындай идентификатор U& (кіші немесе үлкен
U және амперсанд) таңбасынан басталады, және содан кейін бірден бос
орынсыз екі бағым кетеді, мысалы U&"foo". Айта кететін нәрсе, осы жағдайда
& операторымен белгісіздік пайда болады. Оның алдын алу үшін бұл
42
операторды бос орынмен қоршау керек. Содан кейін бағым ішіне Unicode
таңбаларын екі тәсілмен дазуға болады: кері қиғаш сызық , ал одан кейін
оналтылық сандардың төртеуінің таңба коды, немесе кері қиғаш сызық, қосу
таңбасы, кейін оналтылық саннан тұратын код. Мысалы, "data"
идентификаторын келесі түрде жазуға болады:
U&"d\0061t\+000061"
Келесі тривиалды емес мысалда кирилицада жазылған «слон» сөзі
кодталған:
U&"\0441\043B\043E\043D"
Егер кері қиғаш сызықты қолдану қиындық тудырса, басқа арнайы
таңбаны қолдануға болады. Оны қатардан кейін UESCAPE жаза отырып
көрсетуге болады, мысалы:
U&"d!0061t!+000061" UESCAPE '!'
Арнайы символ ретінде тек оналтылық сандар, қосу таңбасы, апостроф,
бағым мен бос орын таңбаларынан басқа кез келген таңбаны таңдауға болады.
Арнайы таңба екі бағымға (") алынбайды, олар апострофқа алынады.
Апостроф таңбасын арнайы таңбаға жасау үшін оны екі рет жазу керек.
Unicode
формат сервер кодтауы UTF8 болған жағдайда ғана толық
қолданылады. Басқа қодтау қолданған жағдайда тек ASCII-таңбалар (\007F
дейінге дейін кодтармен) көрсетілімі жіберіледі. Төрттік формада, оналтылық
формада да UTF-16 суррогаттық жұп жазуға болады және осылайша U+FFFF
үлкен кодпен таңбалар жасалынады. Алайда оналтылық форманың бар болуы
техникалық жағынан бұл тәсілді керексіз етеді. Суррогаттық жұптар тікелей
сақталмайды, ал бір таңбаға біріктіреледі, кейін ол таңба UTF-8 кодталады.
Бағымға алынған идентификатор регистрға тәуелді болып қалайды, ал
бағымсыз идентификатор төменгі регистрге ауыстырылады. Мысалы, FOO,
foo және "foo" идентификаторлары PostgreSQL бірдей болып есептелінеді,
бірақ "Foo" мен "FOO" бір
бірінен және алдынғы үшеуінен айырмашылығы
бар. PostgreSQL жолы бойынша аттарды бағымсыз жазып төменгі регистрге
алып келу SQL стандартымен сыйыспайды; ол стандарт аттар жоғарғы
регистрге келу керектігін көрсетеді, яғни стандарт бойынша foo эквивалентті
"FOO", "foo" эквивалентті емес. Сондықтан тасымалданатын құралымдар
жасауда белгісі бір аттарды ғана бағымға алу керек немесе бағымға мүлдем
алмау керек.
5.1.2 Константалар
PostgreSQL үш түрлі меңзелу типті константалар бар: қатарлар, биттік
қатар және сандар. Константаларды типтарын анық көрсетіп жазуға болады;
бұл оларды дәл ұсынуға және тиімдірек өңдеуге мүмкіндік береді.