Pengantar
PostgreSQL dan sistem manajemen basis data relasional lainnya menggunakan database dan tabel untuk menyusun dan mengatur data mereka. Kami dapat meninjau definisi kedua istilah tersebut dengan cepat:
- database: pisahkan kumpulan struktur dan data yang berbeda satu sama lain
- tabel: mendefinisikan struktur data dan menyimpan nilai data aktual dalam database
Di PostgreSQL, ada juga objek perantara antara database dan tabel yang disebut skema :
- skema: namespace dalam database yang berisi tabel, indeks, tampilan, dan item lainnya.
Panduan ini tidak akan membahas secara langsung konsep skema PostgreSQL, tetapi ada baiknya mengetahui bahwa itu ada di sana.
Sebagai gantinya, kami akan berfokus pada cara membuat dan menghancurkan database dan tabel PostgreSQL. Contoh utamanya akan menggunakan SQL, tetapi menjelang akhir, kami akan menunjukkan kepada Anda bagaimana melakukan beberapa tugas ini menggunakan baris perintah. Alternatif ini menggunakan alat yang disertakan dalam instalasi PostgreSQL standar yang tersedia jika Anda memiliki akses administratif ke host PostgreSQL.
Beberapa pernyataan yang tercakup dalam panduan ini, khususnya CREATE TABLE
PostgreSQL pernyataan, memiliki banyak opsi tambahan yang berada di luar cakupan artikel ini. Jika Anda menginginkan informasi tambahan, cari tahu lebih lanjut dengan melihat dokumentasi resmi PostgreSQL.
Prasyarat
Untuk mengikuti panduan ini, Anda harus masuk ke instance PostgreSQL dengan pengguna dengan hak administratif menggunakan psql
klien baris perintah. Instance PostgreSQL Anda dapat diinstal secara lokal, jarak jauh, atau disediakan oleh penyedia.
Secara khusus, pengguna PostgreSQL Anda akan membutuhkan CREATE DB
hak istimewa atau menjadi Superuser
, yang dapat Anda periksa dengan \du
meta-perintah di psql
:
\du
List of roles Role name | Attributes | Member of-----------+------------------------------------------------------------+----------- postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
postgres
superuser, yang dibuat secara otomatis saat penginstalan, memiliki hak istimewa yang diperlukan, tetapi Anda dapat menggunakan pengguna mana pun dengan Create DB
hak istimewa.
Buat database baru
Setelah Anda terhubung ke instance PostgreSQL Anda menggunakan psql
atau klien SQL lainnya, Anda dapat membuat database menggunakan SQL.
Sintaks dasar untuk membuat database adalah:
CREATE DATABASE db_name;
Ini akan membuat database bernama db_name
di server saat ini dengan pengguna saat ini ditetapkan sebagai pemilik database baru menggunakan pengaturan database default. Anda dapat melihat properti dari template1
default template menggunakan psql
berikut ini meta-perintah:
\l template1
List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges-----------+----------+----------+-------------+-------------+----------------------- template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres(1 row)
Anda dapat menambahkan parameter tambahan untuk mengubah cara database Anda dibuat. Ini adalah beberapa opsi umum:
- ENKODE: menyetel pengkodean karakter untuk database.
- LC_COLLATE: menyetel kolasi , atau mengurutkan, mengurutkan database. Ini adalah opsi pelokalan yang menentukan cara item diatur saat dipesan.
- LC_CTYPE: menetapkan klasifikasi karakter untuk database baru. Ini adalah opsi pelokalan yang memengaruhi karakter yang dianggap sebagai huruf besar, huruf kecil, dan angka.
Ini dapat membantu memastikan bahwa database dapat menyimpan data dalam format yang Anda rencanakan untuk didukung dan dengan preferensi pelokalan proyek Anda.
Misalnya, untuk memastikan bahwa database Anda dibuat dengan dukungan Unicode dan untuk mengganti lokal server sendiri untuk menggunakan lokalisasi bahasa Inggris Amerika (ini semua kebetulan cocok dengan nilai dalam template1
ditunjukkan di atas, sehingga tidak ada perubahan yang benar-benar terjadi), Anda dapat mengetik:
CREATE DATABASE db_name ENCODING 'UTF8' LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8';
Untuk mengikuti contoh dalam panduan ini, buat database bernama school
menggunakan pengaturan lokal default instance Anda dan pengkodean karakter UTF8:
CREATE DATABASE school ENCODING 'UTF8';
Ini akan membuat database baru Anda menggunakan spesifikasi yang Anda berikan.
Mencantumkan database yang ada
Untuk menentukan database apa yang saat ini tersedia di server atau cluster Anda, Anda dapat menggunakan pernyataan SQL berikut:
SELECT datname FROM pg_database;
Ini akan mencantumkan setiap database yang saat ini ditentukan dalam lingkungan:
datname----------- _dodb template1 template0 defaultdb school(5 rows)
Seperti yang disebutkan sebelumnya, jika Anda terhubung menggunakan psql
klien, Anda juga bisa mendapatkan informasi ini \l
meta-perintah:
\l
Ini akan menampilkan nama database yang tersedia bersama dengan pemiliknya, pengkodean, pengaturan lokal, dan hak istimewa:
List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges-----------+----------+----------+-------------+-------------+----------------------- _dodb | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | defaultdb | doadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | school | doadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres(5 rows)
school
database yang kita buat ditampilkan di antara database lain pada sistem. Ini adalah cara yang baik untuk mendapatkan gambaran umum tentang database dalam server atau cluster Anda.
Buat tabel dalam database
Setelah membuat satu atau beberapa database, Anda dapat mulai menentukan tabel untuk menyimpan data Anda. Tabel terdiri dari nama dan skema yang ditentukan yang menentukan bidang dan tipe data yang harus berisi setiap record.
PostgreSQL CREATE TABLE
sintaks
Anda dapat membuat tabel menggunakan CREATE TABLE
penyataan. Sintaks dasar yang disederhanakan untuk perintah terlihat seperti berikut:
CREATE TABLE table_name ( column_name TYPE [column_constraint], [table_constraint,]);
Komponen sintaks di atas meliputi:
CREATE TABLE table_name
:Pernyataan pembuatan dasar yang menandakan bahwa Anda ingin mendefinisikan sebuah tabel.table_name
placeholder harus diganti dengan nama tabel yang ingin Anda gunakan.column_name TYPE
:Mendefinisikan kolom dasar dalam tabel.column_name
placeholder harus diganti dengan nama yang ingin Anda gunakan untuk kolom Anda.TYPE
menentukan tipe data PostgreSQL untuk kolom. Data yang disimpan dalam tabel harus sesuai dengan struktur kolom dan tipe data kolom yang akan diterima.column_constraint
:Batasan kolom adalah batasan opsional untuk menambahkan batasan lebih lanjut pada data yang dapat disimpan di kolom. Misalnya, Anda dapat mewajibkan entri bukan nol, unik, atau bilangan bulat positif.table_constraints
:Batasan tabel mirip dengan batasan kolom tetapi melibatkan interaksi beberapa kolom. Misalnya, Anda dapat memiliki batasan tabel yang memeriksa bahwaDATE_OF_BIRTH
sebelumDATE_OF_DEATH
dalam sebuah tabel.
Buat tabel bersyarat dengan IF NOT EXISTS
klausa
Secara default, jika Anda mencoba membuat tabel di PostgreSQL yang sudah ada dalam database, kesalahan akan terjadi. Untuk mengatasi masalah ini jika Anda ingin membuat tabel jika tidak ada, tetapi lanjutkan jika sudah ada, Anda dapat menggunakan IF NOT EXISTS
ayat. IF NOT EXISTS
qualifier opsional yang memberi tahu PostgreSQL untuk mengabaikan pernyataan jika database sudah ada.
Untuk menggunakan IF NOT EXISTS
klausa, masukkan ke dalam perintah setelah CREATE TABLE
sintaks dan sebelum nama tabel:
CREATE TABLE IF NOT EXISTS table_name ( column_name TYPE [column_constraint], [table_constraint,]);
Varian ini akan mencoba membuat tabel. Jika tabel dengan nama tersebut sudah ada dalam database yang ditentukan, PostgreSQL akan memberikan peringatan yang menunjukkan bahwa nama tabel sudah diambil alih-alih gagal dengan kesalahan.
Cara membuat tabel di PostgreSQL
Sintaks di atas sudah cukup untuk membuat tabel dasar. Sebagai contoh, kita akan membuat dua tabel di dalam school
basis data. Satu tabel akan disebut supplies
dan yang lainnya akan disebut teachers
:
Dalam supplies
tabel, kami ingin memiliki bidang berikut:
- ID: ID unik untuk setiap jenis perlengkapan sekolah.
- Nama: Nama item sekolah tertentu.
- Deskripsi: Deskripsi singkat tentang item tersebut.
- Produsen: Nama produsen barang.
- Warna: Warna item.
- Inventaris: Jumlah barang yang kami miliki untuk jenis perlengkapan sekolah tertentu. Ini tidak boleh kurang dari 0.
Kita dapat membuat supplies
tabel dengan kualitas di atas menggunakan SQL berikut.
Pertama, ubah ke school
database yang Anda buat dengan psql
dengan mengetik:
\c school
Ini akan mengubah database yang akan menjadi target perintah kita di masa mendatang. Prompt Anda harus berubah untuk mencerminkan database.
Selanjutnya, buat supplies
tabel dengan pernyataan berikut:
CREATE TABLE supplies ( id INT PRIMARY KEY, name VARCHAR, description VARCHAR, manufacturer VARCHAR, color VARCHAR, inventory int CHECK (inventory > 0));
Ini akan membuat supplies
tabel di dalam school
basis data. PRIMARY KEY
batasan kolom adalah batasan khusus yang digunakan untuk menunjukkan kolom yang secara unik dapat mengidentifikasi catatan dalam tabel. Dengan demikian, batasan menentukan bahwa kolom tidak boleh nol dan harus unik. PostgreSQL membuat indeks untuk kolom kunci utama guna meningkatkan kecepatan kueri.
Verifikasi bahwa tabel baru ada dengan mengetik:
\dt
List of relations Schema | Name | Type | Owner --------+----------+-------+--------- public | supplies | table | doadmin(1 row)
Verifikasi bahwa skema mencerminkan desain yang diinginkan dengan mengetik:
\d supplies
Table "public.supplies" Column | Type | Collation | Nullable | Default--------------+-------------------+-----------+----------+--------- id | integer | | not null | name | character varying | | | description | character varying | | | manufacturer | character varying | | | color | character varying | | | inventory | integer | | |Indexes: "supplies_pkey" PRIMARY KEY, btree (id)Check constraints: "supplies_inventory_check" CHECK (inventory > 0)
Kita bisa melihat masing-masing kolom dan tipe data yang kita tentukan. Batasan kolom yang kita definisikan untuk inventory
kolom terdaftar menjelang akhir.
Selanjutnya, kita akan membuat teachers
meja. Dalam tabel ini, kolom berikut harus ada:
- Nomor Karyawan :Nomor identifikasi karyawan yang unik.
- Nama depan :Nama depan guru.
- Nama belakang :Nama belakang guru.
- Subjek :Mata pelajaran yang direkrut guru untuk mengajar.
- Tingkat kelas :Tingkat kelas siswa yang direkrut untuk mengajar.
Buat teachers
tabel dengan skema di atas dengan SQL berikut:
CREATE TABLE teachers ( id INT PRIMARY KEY, first_name VARCHAR, last_name VARCHAR, subject VARCHAR, grade_level int);
Cara membuat tabel dengan kunci utama dan kunci asing
Anda dapat menemukan informasi tentang membuat tabel dengan kunci utama dan asing di beberapa panduan PostgreSQL kami yang lain. Kunci utama dan kunci asing keduanya merupakan jenis batasan basis data dalam PostgreSQL.
Kunci utama adalah kolom atau kolom khusus yang dijamin unik di seluruh baris dalam tabel yang sama. Semua kunci utama dapat digunakan untuk mengidentifikasi baris tertentu secara unik. Kunci utama tidak hanya memastikan bahwa setiap baris memiliki nilai unik untuk kolom kunci utama, tetapi juga memastikan bahwa tidak ada baris yang berisi NULL
nilai untuk kolom itu. Seringkali, kunci utama di PostgreSQL menggunakan format berikut untuk menentukan kunci utama yang bertambah secara otomatis:id SERIAL PRIMARY KEY
.
Kunci asing adalah cara untuk memastikan bahwa kolom atau kolom dalam satu tabel cocok dengan nilai yang terkandung dalam tabel lain. Ini membantu memastikan integritas referensial antar tabel.
Cara melihat tabel di PostgreSQL
Di PostgreSQL Anda dapat membuat daftar tabel dalam beberapa cara berbeda tergantung pada informasi apa yang Anda cari.
Jika Anda ingin melihat tabel apa yang tersedia dalam database Anda, Anda dapat menggunakan \dt
meta-command disertakan dengan psql
klien untuk membuat daftar semua tabel, seperti yang kami tunjukkan di atas:
\dt
List of relations Schema | Name | Type | Owner--------+----------+-------+--------- public | supplies | table | doadmin public | teachers | table | doadmin(2 rows)
Anda juga dapat memeriksa apakah skema untuk tabel sesuai dengan spesifikasi Anda:
\d teachers
Table "public.teachers" Column | Type | Collation | Nullable | Default-------------+-------------------+-----------+----------+--------- id | integer | | not null | first_name | character varying | | | last_name | character varying | | | subject | character varying | | | grade_level | integer | | |Indexes: "teachers_pkey" PRIMARY KEY, btree (id)
teachers
tabel tampaknya cocok dengan definisi kita.
Ubah tabel
Jika Anda perlu mengubah skema tabel yang ada di PostgreSQL, Anda dapat menggunakan ALTER TABLE
memerintah. ALTER TABLE
perintahnya sangat mirip dengan CREATE TABLE
perintah, tetapi beroperasi pada tabel yang ada.
Mengubah sintaks tabel
Sintaks dasar untuk memodifikasi tabel di PostgreSQL terlihat seperti ini:
ALTER TABLE <table_name> <change_command> <change_parameters>
<change_command>
menunjukkan jenis perubahan yang tepat yang ingin Anda buat, apakah itu melibatkan pengaturan opsi yang berbeda pada tabel, menambah atau menghapus kolom, atau mengubah jenis atau batasan. <change_parameters>
bagian dari perintah berisi informasi tambahan apa pun yang dibutuhkan PostgreSQL untuk menyelesaikan perubahan.
Menambahkan kolom ke tabel
Anda dapat menambahkan kolom ke tabel PostgreSQL dengan ADD COLUMN
ubah perintah. Parameter perubahan akan menyertakan nama kolom, jenis, dan opsi, seperti yang Anda tentukan di CREATE TABLE
perintah.
Misalnya, untuk menambahkan kolom bernama missing_column
dari text
ketik ke tabel bernama some_table
, Anda akan mengetik:
ALTER TABLE some_table ADD COLUMN missing_column text;
Menghapus kolom dari tabel
Sebaliknya, jika Anda ingin menghapus kolom yang ada, Anda dapat menggunakan DROP COLUMN
perintah sebagai gantinya. Anda perlu menentukan nama kolom yang ingin Anda jatuhkan sebagai parameter perubahan:
ALTER TABLE some_table DROP COLUMN useless_column;
Mengubah tipe data kolom
Untuk mengubah tipe data yang digunakan PostgreSQL untuk kolom tertentu, Anda dapat menggunakan ALTER COLUMN
ubah perintah dengan SET DATA TYPE
perintah kolom. Parameternya termasuk nama kolom, tipe barunya, dan USING
opsional klausa untuk menentukan bagaimana tipe lama harus dikonversi ke tipe baru.
Misalnya, untuk menetapkan nilai id
kolom di resident
tabel ke int
menggunakan pemeran eksplisit, kita dapat mengetik yang berikut:
ALTER TABLE resident ALTER COLUMN id SET DATA TYPE int USING id::int;
Perubahan tabel lainnya
Banyak jenis perubahan lain yang dapat dicapai dengan ALTER TABLE
memerintah. Untuk informasi lebih lanjut tentang opsi yang tersedia, lihat dokumentasi PostgreSQL resmi untuk ALTER TABLE
.
Lepas tabel
Jika Anda ingin menghapus tabel, Anda dapat menggunakan DROP TABLE
pernyataan SQL. Ini akan menghapus tabel serta semua data yang tersimpan di dalamnya.
Sintaks dasarnya terlihat seperti ini:
DROP TABLE table_name;
Ini akan menghapus tabel jika ada dan membuat kesalahan jika nama tabel tidak ada.
Jika Anda ingin menghapus tabel jika ada dan tidak melakukan apa pun jika tidak ada, Anda dapat menyertakan IF EXISTS
kualifikasi dalam pernyataan:
DROP TABLE IF EXISTS table_name;
Tabel yang memiliki dependensi pada tabel atau objek lain tidak dapat dihapus secara default saat dependensi tersebut ada. Untuk menghindari kesalahan, Anda dapat secara opsional menyertakan CASCADE
parameter, yang secara otomatis menghapus semua dependensi bersama dengan tabel:
DROP TABLE table_name CASCADE;
Jika ada tabel yang memiliki kunci asing batasan, yang mereferensikan tabel yang Anda hapus, batasan itu akan dihapus secara otomatis.
Hapus supplies
tabel yang kita buat tadi dengan mengetik:
DROP TABLE supplies;
Kami akan menjaga teachers
database untuk menunjukkan bahwa pernyataan untuk menghapus database juga menghapus semua objek anak seperti tabel.
Lepaskan database
DROP DATABASE
pernyataan memberitahu PostgreSQL untuk menghapus database yang ditentukan. Sintaks dasarnya terlihat seperti ini:
DROP DATABASE database_name;
Ganti database_name
placeholder dengan nama database yang ingin Anda hapus. Ini akan menghapus database jika ditemukan. Jika database tidak dapat ditemukan, akan terjadi kesalahan:
DROP DATABASE some_database;
ERROR: database "some_database" does not exist
Jika Anda ingin menghapus database jika ada dan tidak melakukan apa-apa, sertakan IF EXISTS
opsional pilihan:
DROP DATABASE IF EXISTS some_database;
NOTICE: database "some_database" does not exist, skippingDROP DATABASE
Ini akan menghapus database atau tidak melakukan apa pun jika tidak dapat ditemukan.
Untuk menghapus school
database yang kami gunakan dalam panduan ini, buat daftar database yang ada di sistem Anda:
\l
List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges-----------+----------+----------+-------------+-------------+----------------------- _dodb | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | defaultdb | doadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | school | doadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres(5 rows)
Buka koneksi baru ke salah satu database yang tidak ingin Anda hapus:
\c defaultdb
Setelah koneksi baru terbuka, hapus school
database dengan perintah berikut:
DROP DATABASE school;
Ini akan menghapus school
database bersama dengan teachers
tabel yang ditentukan di dalamnya.
Jika Anda telah mengikuti menggunakan SQL, Anda dapat mengakhiri di sini atau melompat ke kesimpulan. Jika Anda ingin mempelajari tentang cara membuat dan menghapus database dari baris perintah, lanjutkan ke bagian berikutnya.
Menggunakan alat baris perintah administratif untuk membuat dan menghapus database
Jika Anda memiliki akses shell ke server atau cluster tempat PostgreSQL diinstal, Anda mungkin memiliki akses ke beberapa alat baris perintah tambahan yang dapat membantu membuat dan menghapus database. createdb
dan dropdb
perintah dibundel dengan PostgreSQL saat diinstal.
Buat database baru dari baris perintah
Sintaks dasar untuk createdb
perintah (yang harus dijalankan oleh pengguna sistem dengan akses admin ke PostgreSQL) adalah:
createdb db_name
Ini akan membuat database bernama db_name
dalam PostgreSQL menggunakan pengaturan default.
Perintah juga menerima opsi untuk mengubah perilakunya, seperti varian SQL yang Anda lihat sebelumnya. Anda dapat mengetahui lebih lanjut tentang opsi ini dengan man createdb
. Beberapa opsi yang paling penting adalah:
--encoding=
:menyetel pengkodean karakter untuk database.--locale=
:menyetel lokal untuk database.
Ini dapat membantu memastikan bahwa database dapat menyimpan data dalam format yang Anda rencanakan untuk didukung dan dengan preferensi pelokalan proyek Anda.
Misalnya, untuk memastikan bahwa database Anda dibuat dengan dukungan Unicode dan untuk mengganti lokal server sendiri untuk menggunakan lokalisasi bahasa Inggris Amerika, Anda dapat mengetik:
createdb --encoding=UTF8 --locale=en_US db_name
Dengan asumsi Anda memiliki izin yang benar, database akan dibuat sesuai dengan spesifikasi Anda.
Untuk mengikuti contoh dalam panduan ini, Anda dapat membuat database bernama school
menggunakan lokal default dan pengkodean karakter UTF8 dengan mengetik:
createdb --encoding=UTF8 school
Anda kemudian dapat terhubung ke database menggunakan psql
untuk menyiapkan tabel Anda seperti biasa.
Lepaskan database dari baris perintah
dropdb
perintah mencerminkan DROP DATABASE
pernyataan SQL. Ini memiliki sintaks dasar berikut:
dropdb database_name
Ubah database_name
placeholder untuk mereferensikan database yang ingin Anda hapus.
Secara default, perintah ini akan menghasilkan kesalahan jika database yang ditentukan tidak dapat ditemukan. Untuk menghindari hal ini, Anda dapat menyertakan --if-exists
opsional bendera:
dropdb --if-exists database_name
Ini akan menghapus database yang ditentukan jika ada. Jika tidak, itu tidak akan menghasilkan apa-apa.
Untuk menghapus school
database yang kita buat tadi, ketik:
dropdb school
Ini akan menghapus database dan elemen turunan apa pun, seperti tabel, di dalamnya.
Kesimpulan
Artikel ini membahas dasar-dasar cara membuat dan menghapus database dan tabel di dalam PostgreSQL. Ini adalah beberapa perintah paling dasar yang diperlukan untuk menyiapkan sistem database dan mendefinisikan struktur data Anda.
Seperti disebutkan sebelumnya, pernyataan SQL yang tercakup dalam tutorial PostgreSQL ini, khususnya CREATE TABLE
pernyataan, memiliki banyak parameter tambahan yang dapat digunakan untuk mengubah perilaku PostgreSQL. Anda dapat mengetahui lebih lanjut tentang ini dengan melihat dokumentasi resmi PostgreSQL.