Ачааллж байна...
Өмнөх хичээлд PostgreSQL server таны компьютерт суусан, service болж арын хэсэгт ажиллаж байгаа, psql -U postgres-ээр анх удаа холбогдож SELECT version(); ажиллуулсан. Server бол архивын алба — харин түүнтэй ярих хэрэгсэл хэрэгтэй. SQLite-д бид DB Browser-ийг ашигласан. PostgreSQL-д суулгагч хоёр хэрэгсэл өгсөн: pgAdmin ба psql.
pgAdmin бол график програм — цонх, товч, мод хэлбэрийн жагсаалт, query бичих талбар. DB Browser-т дассан танд хурдан танил санагдана. psql бол терминалын хэрэгсэл — зөвхөн текст, тушаал, үр дүн. Эхний харцаар psql хуучинсаг, хэцүү мэт санагдаж магадгүй. Гэвч энэ хичээлд шударгаар хэлэх ёстой зүйл бий: psql бол мэргэжлийн ур чадвар. Ихэнх жинхэнэ server-т график цонх огт байдаггүй — тэнд зөвхөн терминал бий. Хөгжүүлэгч, өгөгдлийн сангийн администраторууд psql-ийг өдөр бүр ашигладаг, учир нь энэ нь хурдан, хаа сайгүй ажилладаг, скриптэд оруулж болдог.
Энэ хичээлд хоёуланг нь танилцуулна. pgAdmin-ийг товч аялалаар, psql-ийг илүү гүнзгий — үндсэн тушаалуудыг, олон мөрт query-г, алдааны мессежийг уншихыг сурна. Мөн өмнөх хичээлд хойшлуулсан кирилл үсгийн асуудлыг шийдэж, энэ сургалтын Түвшин 4-5-ын бүх ажил явагдах library өгөгдлийн санг үүсгэнэ.
Архивын албатай харилцах хоёр арга бий. Эхнийх нь үйлчилгээний танхимаар — тохилог өрөө, ширээ, хавтас бүрийг тавиур дээр харж болдог, товчлуур бүхий маягтууд. Шинэ хүнд таатай, бүх зүйл нүдэнд харагдана. Энэ бол pgAdmin. Хоёр дахь нь жижүүрийн цонхоор шууд — та хүсэлтээ товч, тодорхой бичгээр өгч, хариуг нь бичгээр авна. Ямар ч чимэглэлгүй, гэвч хурдан, мөн архивын алба хаана ч байсан — өөр хотод, шөнийн цагаар — энэ цонх үргэлж нээлттэй. Энэ бол psql.
Туршлагатай хүмүүс хоёуланг нь ашигладаг: шинэ хүснэгтийн бүтцийг нүдээр харах, өгөгдлийг гүйлгэж үзэхэд танхим, хурдан шалгалт, давтагдах ажил, алсын server-т цонх.
Start цэснээс pgAdmin 4-ийг нээнэ. Анх нээхэд хэдэн секунд ачаалагдана — pgAdmin нь дотроо жижиг вэб програм бөгөөд өөрийн цонхонд харагддаг.
Зарим хувилбар анх нээх үед master password тогтоохыг хүсдэг. Энэ нь pgAdmin-д хадгалсан server-ийн нууц үгсийг хамгаалах тусдаа нууц үг бөгөөд PostgreSQL-ийн postgres нууц үгээс өөр байж болно. Хүсвэл тогтоогоод тэмдэглэж аваарай.
Зүүн талд Object Explorer гэсэн мод бий. Servers-ийг задлахад суулгагчийн автоматаар бүртгэсэн PostgreSQL 18 server харагдана. Түүн дээр дарахад нууц үг асууна — өмнөх хичээлд тогтоосон postgres-ийн нууц үгээ оруулна (гарын байрлал EN). “Save password” тэмдэглэвэл дахин асуухгүй.
Холбогдсоны дараа модыг задлаарай: PostgreSQL 18 → Databases → postgres → Schemas → public → Tables. Tables одоогоор хоосон.
[Зураг: pgAdmin-ийн Object Explorer, задалсан мод]
Энэ модонд SQLite-д байгаагүй нэг давхарга бий: server нэгээс олон өгөгдлийн сантай (Databases), өгөгдлийн сан бүр schema-тай (Schemas), хүснэгтүүд schema дотор амьдардаг. SQLite-д нэг файл — нэг өгөгдлийн сан байсан бол PostgreSQL-ийн нэг server олон өгөгдлийн санг агуулж чадна — архивын албанд олон тусдаа өрөө. postgres гэсэн өгөгдлийн сан бол server-тэй хамт үүссэн анхдагч өрөө. Schema гэдэг нь өгөгдлийн сан доторх хүснэгтүүдийн бүлэг бөгөөд public нь анхдагч бүлэг — энэ сургалтад бид бүх хүснэгтийг тэнд хадгална, тиймээс schema-ийн давхаргыг цаашид тусад нь бодох шаардлагагүй.
postgres өгөгдлийн сан дээр баруун товч дарж Query Tool сонгоно. Баруун талд query бичих талбар нээгдэнэ — DB Browser-ийн Execute SQL табтай ижил үүрэгтэй.
SELECT version(); гэж бичээд F5 (эсвэл дээд талын гурвалжин товч) дарна. Доод хэсгийн Data Output табд үр дүн, Messages табд мессеж харагдана.
[Зураг: pgAdmin Query Tool, query ба Data Output]
Ингээд pgAdmin-ийн аялал дууслаа — бидэнд энэ хэрэгслийн бүх боломж хэрэггүй. Хичээлийн үлдсэн хэсгийг psql-д зориулна, учир нь Бүлэг 11-ээс эхлэн бид Python-оос PostgreSQL-тэй ажиллах бөгөөд тэр үед терминалын дадал илүү чухал болно. pgAdmin-ийг өгөгдлөө нүдээр шалгахыг хүссэн үедээ ашиглаарай.
Өмнөх хичээлд psql-д холбогдоход ийм анхааруулга гарсан:
WARNING: Console code page (437) differs from Windows code page (1252)
8-bit characters might not work correctly.Энэ мессеж юу гэж хэлж байна вэ гэвэл: "консолын кодын хуудас (437) Windows-ийн кодын хуудаснаас (1252) ялгаатай; латин бус тэмдэгтүүд зөв ажиллахгүй байж магадгүй." Энгийн хэлээр: PowerShell-ийн цонх болон psql тэмдэгтүүдийг өөр өөр "цагаан толгой"-оор уншиж байна. Англи текстэд асуудал үүсэхгүй, харин кирилл үсэг асуултын тэмдэг эсвэл утгагүй тэмдэгтүүд болон харагдаж болно. Үүнийг psql нээхээсээ өмнө хоёр мөрөөр засна. PowerShell-д:
powershell
chcp 65001
$env:PGCLIENTENCODING = "UTF8"Эхний мөр юу гэж хэлж байна вэ гэвэл: "энэ консолын кодын хуудсыг UTF-8 (65001) болго" — дэлхийн бүх үсгийг, тэр дундаа кирилл, монгол Ө, Ү-г агуулдаг стандарт. Хоёр дахь мөр: “psql-д server-тэй UTF-8-аар харилцахыг хэл.” Эдгээр тохиргоо зөвхөн энэ PowerShell цонхонд хүчинтэй тул psql нээх бүрдээ давтах хэрэгтэй (эсвэл "Хөгжүүлэгчийн хэрэгсэл" сургалтад сурсан PowerShell profile-д нэмж болно). Дараа нь psql нээхэд WARNING мөр харагдсаар байж магадгүй, гэвч кирилл текст зөв харагдах болно.
Шударга нэг анхааруулга: Windows-ийн консолд кирилл текстийг psql-д шууд бичих нь заримдаа тогтворгүй байдаг — гарын байрлал, терминалын програмаас хамаарч үсэг алдагдаж болно. Тиймээс энэ сургалтад кирилл өгөгдөл оруулахдаа бид ихэвчлэн .sql файл ажиллуулах эсвэл pgAdmin-ийн Query Tool-ийг ашиглана. psql-ийг query ажиллуулж, үр дүн харахад — тэр дундаа кирилл үр дүнг — бүрэн найдвартай.
Одоо холбогдъё:
powershell
psql -U postgresНууц үгээ оруулахад postgres=# урилга гарна.
psql-д хоёр төрлийн оролт бий. Нэгдүгээрт, SQL query — бидний мэдэх SELECT, CREATE гэх мэт, цэг таслалаар төгсдөг, server руу илгээгддэг. Хоёрдугаарт, psql-ийн өөрийн тушаал — ташуу зураас (\)-аар эхэлдэг, цэг таслалгүй, psql өөрөө гүйцэтгэдэг. Хоёуланг нь хослуулан ашиглана.
Эхлээд server-ийн өгөгдлийн сангуудыг жагсаая:
\lҮр дүн (товчилсон):
List of databases
Name | Owner | Encoding | ...
-----------+----------+----------+-----
postgres | postgres | UTF8 | ...
template0 | postgres | UTF8 | ...
template1 | postgres | UTF8 | ...
(3 rows)Энэ тушаал юу гэж хэлж байна вэ гэвэл: "энэ server дээрх бүх өгөгдлийн санг жагсаа" — \l нь “list”. Гурван өгөгдлийн сан: postgres (анхдагч өрөө) ба хоёр template (шинэ өгөгдлийн сан үүсгэхэд PostgreSQL-ийн дотоод загвар — тэдэнд бүү хүр). Encoding баганын UTF8 нь кирилл текстийг хадгалахад бэлэн гэсэн үг.
Одоо энэ сургалтын өгөгдлийн санг үүсгэе:
sql
CREATE DATABASE library;Үр дүн:
CREATE DATABASEЭнэ query юу гэж хэлж байна вэ гэвэл: “library нэртэй шинэ өгөгдлийн сан үүсгэ.” psql нь амжилттай тушаалын нэрийг давтан хэлж баталгаажуулдаг. SQLite-д шинэ өгөгдлийн сан үүсгэх нь DB Browser-ийн “New Database” товч — шинэ файл байсан бол PostgreSQL-д энэ нь SQL тушаал: архивын албанд шинэ өрөө нээх.
Бид одоо ч postgres өгөгдлийн санд холбогдсон хэвээр. Шинэ өгөгдлийн сан руу шилжье:
\c libraryҮр дүн:
You are now connected to database "library" as user "postgres".
library=#Энэ мессеж юу гэж хэлж байна вэ гэвэл: "одоо та library өгөгдлийн санд postgres хэрэглэгчээр холбогдлоо." \c нь “connect”. Урилга library=# болж өөрчлөгдсөнийг анзаараарай — psql үргэлж та аль өгөгдлийн санд байгааг урилгадаа харуулдаг. Энэ нь чухал хамгаалалт: хүснэгт үүсгэх, устгахаасаа өмнө урилгыг хараарай. Ирээдүйд psql -U postgres -d library гэж шууд library-д холбогдож болно — -d нь “database”.
Жишээ 1: хүснэгт үүсгэж, жагсаах
Туршилтын жижиг хүснэгт үүсгэе. psql-д олон мөрт query бичиж болно — Enter дарахад psql query дуусаагүй гэдгийг цэг таслалгүйгээс мэдэж, үргэлжлүүлэхийг хүлээнэ:
library=# CREATE TABLE greetings (
library(# id INTEGER PRIMARY KEY,
library(# message TEXT NOT NULL
library(# );
CREATE TABLEУрилга library=#-ээс library(# болж өөрчлөгдсөнийг анзаараарай — нээлттэй хаалт байгааг psql сануулж байна. Цэг таслал бүхий мөр Enter дарахад query server руу илгээгдэнэ. Энэ query юу гэж хэлж байна вэ гэвэл: “greetings хүснэгт үүсгэ — id бүхэл тоон түлхүүр, message хоосон байж болохгүй текст.” Бүлэг 4-ийн CREATE TABLE яг ижилээр ажиллаж байна.
Хоёр мөр нэмье:
sql
INSERT INTO greetings (id, message) VALUES (1, 'Hello'), (2, 'Сайн байна уу');Үр дүн:
INSERT 0 2Энэ мессеж юу гэж хэлж байна вэ гэвэл: “INSERT амжилттай, 2 мөр нэмэгдлээ.” Дундах 0 нь түүхэн шалтгаантай, одоо ашиглагддаггүй талбар — үл тоомсорлож болно. Сүүлийн тоо бол DB Browser-ийн “rows affected”-ийн PostgreSQL дахь хувилбар. (Хэрэв кирилл үсэг бичихэд асуудал гарвал энэ мөрийг pgAdmin-ийн Query Tool-д library өгөгдлийн сан дээр ажиллуулж болно.)
Одоо хүснэгтүүдийг жагсаая:
\dtҮр дүн:
List of relations
Schema | Name | Type | Owner
--------+-----------+-------+----------
public | greetings | table | postgres
(1 row)Энэ тушаал юу гэж хэлж байна вэ гэвэл: "энэ өгөгдлийн сангийн хүснэгтүүдийг жагсаа" — \dt нь “describe tables”. Нэг хүснэгт, public schema-д. Энэ бол DB Browser-ийн Database Structure табын psql хувилбар. Нэг хүснэгтийн бүтцийг харахыг хүсвэл \d greetings — баганууд, төрлүүд, constraint-ууд, index-үүд бүгд харагдана.
Жишээ 2: query ажиллуулж, үр дүн унших
sql
SELECT * FROM greetings ORDER BY id;Үр дүн:
id | message
----+---------------
1 | Hello
2 | Сайн байна уу
(2 rows)Энэ query юу гэж хэлж байна вэ гэвэл: “greetings хүснэгтийн бүх мөрийг id-аар эрэмбэлж харуул.” psql үр дүнг текстэн хүснэгт хэлбэрээр зурж, төгсгөлд мөрийн тоог хаалтанд бичнэ — DB Browser-ийн “rows returned”-тэй адил. Кирилл текст зөв харагдаж байгаа нь кодын хуудасны тохиргоо ажилласны нотолгоо. Хэрэв "Сайн байна уу"-ны оронд утгагүй тэмдэгтүүд харагдвал psql-ээс гараад (\q), chcp 65001 ба PGCLIENTENCODING мөрүүдийг ажиллуулсан эсэхээ шалгаад дахин холбогдоорой.
Одоо ижил өгөгдлийг pgAdmin-д харъя. pgAdmin-ийн Object Explorer-т Databases дээр баруун товч дарж Refresh сонгоно — library гарч ирнэ. Түүнийг задлаад Schemas → public → Tables руу ороход greetings харагдана. pgAdmin шинэ объектуудыг автоматаар харуулдаггүй тул Refresh хийх нь түгээмэл алхам. Хоёр хэрэгсэл нэг server-ийн нэг өгөгдлийг харж байна — өмнөх хичээлийн "олон зочин нэг архивт" гэсэн санаа таны өөрийн компьютер дээр.
Жишээ 3: PostgreSQL-ийн алдааны мессеж
Хүснэгтийн нэрийг санаатайгаар буруу бичье:
sql
SELECT * FROM greting;Үр дүн:
ERROR: relation "greting" does not exist
LINE 1: SELECT * FROM greting;
^Энэ мессеж юу гэж хэлж байна вэ гэвэл: “greting гэдэг relation (хүснэгт) байхгүй; алдаа нэгдүгээр мөрт, сумаар заасан газарт.” PostgreSQL хүснэгтийг “relation” гэж нэрлэдэг — харилцан холбоот өгөгдлийн сангийн онолын нэр томъёо. SQLite-ийн no such table: greting-тэй харьцуулахад энэ мессеж нэмэлт мэдээлэлтэй: query-ний аль мөр, аль байрлалд асуудал гарсныг ^ тэмдэгтээр яг заадаг. Урт олон мөрт query-д энэ нь маш хэрэгтэй — Бүлэг 1-ийн “near ...” гэсэн SQLite-ийн ойролцоо зааврын оронд яг цэг.
Синтаксийн алдааг ч харъя:
sql
SELECT * FORM greetings;Үр дүн:
ERROR: syntax error at or near "FORM"
LINE 1: SELECT * FORM greetings;
^Энэ мессеж юу гэж хэлж байна вэ гэвэл: “FORM гэдэг үгэн дээр эсвэл түүний ойролцоо синтаксийн алдаа гарлаа.” SQLite-ийн near "FORM": syntax error-тэй бараг ижил санаа, гэхдээ байршлыг заасан. Энэ хэлбэрийг энэ сургалтын үлдсэн хэсэгт олон удаа харна.
Жишээ 4: цэг таслал мартах
psql-ийн хамгийн түгээмэл төөрөгдөл алдааны мессеж огт өгдөггүй. Цэг таслалгүй query бичиж Enter дарвал:
library=# SELECT * FROM greetings
library-#Юу ч болсонгүй — psql урилгаа library-# болгоод хүлээж байна. =-ийн оронд - нь “query үргэлжилж байна, би төгсгөлийг нь хүлээж байна” гэсэн дохио. Олон шинэ хэрэглэгч энэ үед “psql гацлаа” гэж боддог. Засвар нь энгийн: ; бичээд Enter — query ажиллана. Хэрэв query-гээ орхимоор байвал Ctrl+C дарж цуцлаад шинээр эхэлнэ. Мөн дээш сум товч өмнөх тушаалуудыг буцааж дуудна — урт query-г засаж дахин ажиллуулахад тустай.
Жишээ 5: туслах ба цэвэрлэх
psql-ийн бүх ташуу зураасан тушаалын жагсаалтыг \?, SQL тушаалын бичлэгийн тусламжийг \h харуулна — жишээ нь \h CREATE TABLE нь CREATE TABLE-ийн бүрэн бичлэгийг харуулна. Эдгээр нь интернэтгүйгээр ажилладаг, хэзээ ч хажууд байдаг лавлах.
Туршилтын хүснэгтийг устгая — library өгөгдлийн сан дараагийн хичээлд цэвэр байх ёстой:
sql
DROP TABLE greetings;Үр дүн: DROP TABLE. Энэ query юу гэж хэлж байна вэ гэвэл: “greetings хүснэгтийг устга.” Нэг чухал ялгааг анзаараарай: DB Browser-т бид Write Changes дараагүй бол Revert хийж болдог байсан. psql-д тушаал бүр тэр даруй хадгалагддаг — DROP TABLE дуусмагц хүснэгт бүрмөсөн алга. Бүлэг 3-ын UPDATE хичээлд “Python-оос эсвэл psql-ээс ажиллуулсан тушаал ихэвчлэн тэр даруй бүрмөсөн хадгалагддаг” гэж анхааруулсан нь энэ. Бүлэг 12-т transaction-ий тухай сурахдаа psql-д ч "буцаах" боломж хэрхэн бий болдгийг харна. Одоохондоо psql-д өгөгдөл өөрчлөх тушаал бүрийн өмнө Бүлэг 3-ын "эхлээд SELECT" дадлыг бүр ч хатуу мөрдөөрэй.
psql-ээс гарах: \q.
Өмнөх хичээлд password authentication failed болон Connection refused-тэй уулзсан. Холбогдох үед гарч болох өөр хоёр алдааг харъя.
Өгөгдлийн сангийн нэрийг буруу бичвэл:
powershell
psql -U postgres -d librrayҮр дүн (нууц үг оруулсны дараа):
psql: error: connection to server at "localhost" (::1), port 5432 failed: FATAL: database "librray" does not existЭнэ мессеж юу гэж хэлж байна вэ гэвэл: “localhost-ийн 5432 порт дээрх server-т холбогдох оролдлого бүтэлгүйтлээ: librray гэдэг өгөгдлийн сан байхгүй.” Мессеж нь холболтын зам бүрийг дарааллаар нь хэлдэг: аль server (localhost), аль хаяг (::1 — "энэ компьютер"-ийн IPv6 хэлбэр), аль порт, эцэст нь шалтгаан. FATAL гэдэг нь "холболт бүрмөсөн бүтэлгүйтсэн" гэсэн утгатай — ERROR-оос ялгаатай нь psql холбогдож ч чадаагүй.
Байхгүй хэрэглэгчээр холбогдохыг оролдвол:
powershell
psql -U adminҮр дүн:
psql: error: connection to server at "localhost" (::1), port 5432 failed: FATAL: role "admin" does not existЭнэ мессеж юу гэж хэлж байна вэ гэвэл: “admin гэдэг role (хэрэглэгч) байхгүй.” PostgreSQL хэрэглэгчийг “role” гэж нэрлэдэг. Одоогоор манай server-т зөвхөн postgres хэрэглэгч бий. Хэрэв -U огт бичихгүй бол psql таны Windows-ийн хэрэглэгчийн нэрээр холбогдохыг оролдох бөгөөд яг ийм алдаа гарна — тиймээс -U postgres-ийг мартаж болохгүй.
Холболтын алдаа бүрийг уншихдаа дарааллаар нь асуу: server ажиллаж байна уу (Connection refused)? Хэрэглэгч байна уу (role does not exist)? Нууц үг зөв үү (password authentication failed)? Өгөгдлийн сан байна уу (database does not exist)? Эдгээр дөрвөн асуулт Бүлэг 11-д Python-оос холбогдох үед ч яг ижил дарааллаар хэрэгтэй болно.
Хэрэв сонирхож байвал psql-д \l+ болон \dt+ гэж нэмэх тэмдэгтэй хувилбаруудыг ажиллуулж, нэмэлт мэдээлэл (хэмжээ гэх мэт) харж үзээрэй. Мөн \h SELECT гэж SELECT-ийн бүрэн бичлэгийг харж, Бүлэг 1-ийн араг ястай харьцуулаарай — WHERE, GROUP BY, HAVING, ORDER BY, LIMIT бүгд таны мэдэх дарааллаар байх болно, мөн та хараахан сураагүй хэдэн нэмэлт хэсэг. Эдгээр нь зөвхөн санал бөгөөд дараагийн хичээлүүд тэдгээрийг хийсэн гэж тооцохгүй.
Буруу өгөгдлийн санд ажиллах. Хүснэгтээ үүсгээд \dt-д харагдахгүй байвал урилгыг хараарай — postgres=# бол та анхдагч өгөгдлийн санд байна, library=# биш. \c library хийгээд дахин шалга. Хамгийн муу тохиолдолд хүснэгтүүд тань буруу өгөгдлийн санд үүссэн байж болно — тэнд DROP хийгээд зөв газарт дахин үүсгэнэ.
psql-ийн тушаалд цэг таслал бичих. \dt; гэж бичвэл psql ихэнхдээ ажиллуулдаг ч зарим тушаалд цэг таслал аргументын нэг хэсэг гэж ойлгогдож асуудал үүсгэнэ — жишээ нь \c library; нь “library;” гэсэн өгөгдлийн санг хайж болно. Ташуу зураасан тушаалд цэг таслал бүү бич.
pgAdmin-д Refresh хийхгүй. psql-ээр үүсгэсэн өгөгдлийн сан, хүснэгт pgAdmin-ийн модонд автоматаар гарч ирэхгүй. Объект "байхгүй" мэт санагдвал эцэг объект дээр нь баруун товч → Refresh.
Кирилл текст утгагүй тэмдэгт болох. psql нээхээсээ өмнө chcp 65001 ба $env:PGCLIENTENCODING = "UTF8" хоёр мөрийг ажиллуулсан эсэхээ шалгаарай. Хэрэв psql-д кирилл бичихэд асуудал гарсаар байвал оруулах өгөгдлийг pgAdmin-ийн Query Tool-ээр эсвэл .sql файлаар ажиллуул.
\q-ийн оронд Ctrl+C-ээр гарах. Ctrl+C нь одоогийн query-г цуцалдаг, psql-ээс гаргадаггүй. psql-ээс гарахдаа \q бичнэ.
Энэ хичээлд та PostgreSQL-тэй ажиллах хоёр хэрэгслийг танилцлаа. pgAdmin нь график програм бөгөөд Object Explorer-ийн мод нь server → өгөгдлийн сангууд → schema → хүснэгтүүд гэсэн PostgreSQL-ийн давхаргуудыг харуулдаг; Query Tool нь DB Browser-ийн Execute SQL-тэй ижил. psql нь терминалын хэрэгсэл бөгөөд мэргэжлийн өдөр тутмын ур чадвар: \l өгөгдлийн сангуудыг, \c шилжилтийг, \dt ба \d хүснэгтүүдийг, \? ба \h тусламжийг, \q гаралтыг гүйцэтгэдэг, SQL query-нүүд цэг таслалаар төгсөж, олон мөрт байж болно. chcp 65001 ба PGCLIENTENCODING-оор кирилл үсгийг засаж, CREATE DATABASE library;-ээр энэ сургалтын өгөгдлийн санг үүсгэлээ. PostgreSQL-ийн алдааны мессеж мөр, байрлалыг ^-ээр яг заадаг бөгөөд холболтын алдааг server, хэрэглэгч, нууц үг, өгөгдлийн сан гэсэн дарааллаар уншина. psql-д тушаал бүр тэр даруй хадгалагддаг.
Дараагийн хичээлээр Бүлэг 10 дуусна. Бид Түвшин 2-ын library_schema.sql скриптийг PostgreSQL дээр гараар шилжүүлж, SQLite-аас юу өөрчлөгдсөнийг өгөгдөл дээр нэг бүрчлэн харна: хатуу төрлүүд, автомат дугаарлалтын шинэ бичлэг, жинхэнэ boolean, мөн өмнөх хичээлүүдэд тэмдэглэсэн бусад ялгаа. Замдаа гарах алдаа бүрийг уншиж засна — эцэст нь library өгөгдлийн сан Түвшин 3-ын бүх тайланг ажиллуулахад бэлэн болно.
Бүртгэлтэй болсноор энэ сургалтын бүх хичээлд хандах эрх авна.