Өгөгдлийн сан ба хүснэгт үүсгэх
Одоо бодит зүйл эхэлж байна! Энэ хичээлд өөрийн өгөгдлийн сан, хүснэгт үүсгэж, мэдээлэл хадгалах орон зайгаа бэлдэнэ. PostgreSQL-ийн бүтцийг ойлговол бусад бүх зүйл хялбар болно.
PostgreSQL-ийн бүтэц
PostgreSQL-д мэдээлэл дараах шатлалаар зохион байгуулагддаг:
PostgreSQL сервер
└── Өгөгдлийн сан (database)
└── Schema
└── Хүснэгт (table)
└── Бичлэг (row)
Нэг сервер дээр олон өгөгдлийн сан байж болно. Жишээ нь: blog_db, shop_db, users_db зэрэг тус тусдаа байна.
schema гэдэг нь хүснэгтүүдийг бүлэглэх хавтас мэт зүйл юм. Өгөгдмөлөөр public schema ашиглагддаг тул эхэндээ түүнийгтөлөөлж ойлгоно.
Өгөгдлийн сан үүсгэх
CREATE DATABASE blog_db;
Шалгах:
postgres=# \l
Өгөгдлийн сан руу орох:
postgres=# \c blog_db
You are now connected to database "blog_db" as user "postgres".
blog_db=#
Өгөгдлийн санг устгах (болгоомжтой — бүх мэдээлэл устана!):
DROP DATABASE blog_db;
Хүснэгт үүсгэх — CREATE TABLE
Хүснэгт үүсгэхдээ баганы нэр, өгөгдлийн төрлийг заана:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
нэр TEXT NOT NULL,
имэйл TEXT UNIQUE NOT NULL,
нас INTEGER,
үүсгэсэн TIMESTAMP DEFAULT NOW()
);
Энд:
SERIAL— автоматаар 1, 2, 3... дугаарлагдах тооPRIMARY KEY— хүснэгтийн давтагдашгүй танигчNOT NULL— хоосон байж болохгүй гэсэн утгаUNIQUE— хүснэгтэд давтагдаж болохгүйDEFAULT NOW()— оруулах үед одоогийн цагийг автоматаар тавина
Хүснэгтийн бүтцийг харах
blog_db=# \d users
Table "public.users"
Column | Type | Nullable | Default
----------+-----------------------------+----------+-------------------
id | integer | not null | nextval('users_id_seq')
нэр | text | not null |
имэйл | text | not null |
нас | integer | |
үүсгэсэн | timestamp without time zone | | now()
Indexes:
"users_pkey" PRIMARY KEY, btree (id)
"users_имэйл_key" UNIQUE CONSTRAINT, btree (имэйл)
Хүснэгт өөрчлөх — ALTER TABLE
Хүснэгтэд шинэ багана нэмэх:
ALTER TABLE users ADD COLUMN утас TEXT;
Баганын нэр өөрчлөх:
ALTER TABLE users RENAME COLUMN нас TO age;
Баганыг устгах:
ALTER TABLE users DROP COLUMN утас;
Хүснэгт устгах — DROP TABLE
DROP TABLE users;
Хэрэв хүснэгт байхгүй бол алдаа гарахгүй байхыг хүсвэл:
DROP TABLE IF EXISTS users;
Жишээ: blog_db үүсгэх
Дараах хоёр хүснэгттэй жижиг блог өгөгдлийн санг үүсгэе:
-- Зохиогчдын хүснэгт
CREATE TABLE authors (
id SERIAL PRIMARY KEY,
нэр TEXT NOT NULL,
имэйл TEXT UNIQUE NOT NULL
);
-- Нийтлэлийн хүснэгт
CREATE TABLE posts (
id SERIAL PRIMARY KEY,
гарчиг TEXT NOT NULL,
агуулга TEXT,
author_id INTEGER REFERENCES authors(id),
нийтлэгдсэн TIMESTAMP DEFAULT NOW()
);
REFERENCES authors(id) гэдэг нь posts хүснэгтийн author_id нь authors хүснэгтийн id-тэй холбоотой гэсэн утга — үүнийг foreign key гэж нэрлэнэ. Дараа хичээлд дэлгэрэнгүй үзнэ.
Дараагийн хичээлд:
PostgreSQL-ийн бүх өгөгдлийн төрлүүдийг судалж — тоо, текст, огноо, boolean болон JSON-ийг хэрхэн зохистой сонгохыг сурна.