Ce face CREATE DATABASE / DROP DATABASE
Un server PostgreSQL (un „cluster”) poate avea mai multe baze de date. Fiecare conexiune lucrează într-o singură bază de date; nu poți face JOIN direct între tabele din baze de date diferite.
CREATE DATABASE copiază baza de date șablon template1. Dacă vrei altă codare sau altă regiune (ordinea alfabetică, de exemplu cu diacritice românești), folosește TEMPLATE template0. Comanda nu poate rula într-o tranzacție (BEGIN).
DROP DATABASE șterge definitiv baza de date. Nu merge cât timp există conexiuni la ea; din PostgreSQL 13, WITH (FORCE) le închide. Din linia de comandă există echivalentele createdb și dropdb.
Parametri
| Parametru | Descriere |
|---|---|
OWNER rol |
Proprietarul bazei de date (implicit: utilizatorul care o creează). |
ENCODING |
Codarea caracterelor; folosește 'UTF8'. |
TEMPLATE template0 |
Șablon curat, necesar când schimbi codarea sau regiunea. |
LOCALE_PROVIDER icu, ICU_LOCALE |
Ordonare după regulile ICU, de exemplu 'ro-RO'. |
WITH (FORCE) |
La DROP DATABASE: închide conexiunile active. |
Ce returnează
Mesajul CREATE DATABASE, respectiv DROP DATABASE.
Exemple
Exemplul 1: Bază de date pentru un magazin online
CREATE DATABASE magazin
OWNER ana
ENCODING 'UTF8'
TEMPLATE template0
LOCALE_PROVIDER icu
ICU_LOCALE 'ro-RO';
\c magazin
Rezultat în psql
CREATE DATABASE
You are now connected to database "magazin" as user "postgres".
Exemplul 2: Ștergere cu conexiuni active
DROP DATABASE magazin_test;
DROP DATABASE magazin_test WITH (FORCE);
Rezultat în psql
ERROR: database "magazin_test" is being accessed by other users
DETAIL: There is 1 other session using the database.
DROP DATABASE
Exemplul 3: Lista bazelor de date
SELECT datname, pg_encoding_to_char(encoding) AS codare
FROM pg_database
WHERE NOT datistemplate
ORDER BY datname;
Rezultat în psql
datname | codare
----------+--------
magazin | UTF8
postgres | UTF8
(2 rows)
Greșeli frecvente
- Rulezi
CREATE DATABASEîntr-unBEGIN ... COMMITsau dintr-un instrument care deschide tranzacții automat: primeștiCREATE DATABASE cannot run inside a transaction block. - Încerci să ștergi baza de date în care ești conectat. Conectează-te la alta (de exemplu
postgres) și rulează de acolo.
Comenzi înrudite
CREATE SCHEMA și search_path: O schemă este un dosar de tabele în interiorul unei baze de date. search_path stabilește în ce scheme caută PostgreSQL numele fără prefix.CREATE ROLE / CREATE USER: Creează un rol: un utilizator care se poate conecta (LOGIN) sau un grup de drepturi atribuit altor roluri.