PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да създавате и изтривате бази данни и таблици в PostgreSQL


Въведение

PostgreSQL и други системи за управление на релационни бази данни използват бази данни и таблици да структурират и организират своите данни. Можем бързо да прегледаме определението на тези два термина:

  • бази данни: отделете различни набори от структури и данни един от друг
  • таблици: дефинирайте структурата на данните и съхранявайте действителните стойности на данните в базите данни

В PostgreSQL има и междинен обект между бази данни и таблици, наречен схема :

  • схема: пространство от имена в база данни, което съдържа таблици, индекси, изгледи и други елементи.

Това ръководство няма да се занимава директно с концепцията на PostgreSQL за схема, но е добре да знаете, че е там.

Вместо това ще се съсредоточим върху това как да създаваме и унищожаваме PostgreSQL бази данни и таблици. Примерите ще използват предимно SQL, но към края ще ви покажем как да изпълнявате някои от тези задачи с помощта на командния ред. Тези алтернативи използват инструменти, включени в стандартната инсталация на PostgreSQL, които са налични, ако имате административен достъп до хоста на PostgreSQL.

Някои от изразите, обхванати в това ръководство, особено PostgreSQL CREATE TABLE изявление, имат много допълнителни опции, които са извън обхвата на тази статия. Ако искате допълнителна информация, научете повече, като разгледате официалната документация на PostgreSQL.



Предварителни условия

За да следвате това ръководство, ще трябва да влезете в екземпляр на PostgreSQL с потребител с административни привилегии, използвайки psql клиент на командния ред. Вашият PostgreSQL екземпляр може да бъде инсталиран локално, отдалечено или предоставен от доставчик.

По-конкретно, вашият потребител на PostgreSQL ще се нуждае от CREATE DB привилегия или да бъдете Superuser , което можете да проверите с \du мета-команда в psql :

\du
                                   List of roles Role name |                         Attributes                         | Member of-----------+------------------------------------------------------------+----------- postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

postgres superuser, който се създава автоматично при инсталиране, има необходимите привилегии, но можете да използвате всеки потребител с Create DB привилегия.



Създаване на нова база данни

След като сте свързани с вашия PostgreSQL екземпляр с помощта на psql или всеки друг SQL клиент, можете да създадете база данни с помощта на SQL.

Основният синтаксис за създаване на база данни е:

CREATE DATABASE db_name;

Това ще създаде база данни, наречена db_name на текущия сървър с текущия потребител, зададен като собственик на новата база данни, използвайки настройките на базата данни по подразбиране. Можете да видите свойствата на template1 по подразбиране шаблон с помощта на следния psql мета-команда:

\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)

Можете да добавите допълнителни параметри, за да промените начина, по който е създадена вашата база данни. Това са някои често срещани опции:

  • КОДИРАНЕ: задава кодирането на знаци за базата данни.
  • LC_COLLATE: задава колекция , или сортиране, ред за базата данни. Това е опция за локализация, която определя как са организирани артикулите, когато са поръчани.
  • LC_CTYPE: задава класификацията на знаците за новата база данни. Това е опция за локализация, която засяга кои знаци се считат за главни, малки и цифри.

Те могат да помогнат да се гарантира, че базата данни може да съхранява данни във форматите, които планирате да поддържате, и с предпочитанията за локализация на вашия проект.

Например, за да гарантирате, че вашата база данни е създадена с поддръжка на Unicode и да замените собствения локал на сървъра, за да използвате локализация на американски английски (всички те съвпадат със стойностите в template1 показано по-горе, така че всъщност няма да настъпи промяна), можете да въведете:

CREATE DATABASE db_name  ENCODING 'UTF8'  LC_COLLATE 'en_US.UTF-8'  LC_CTYPE 'en_US.UTF-8';

За да следвате примерите в това ръководство, създайте база данни, наречена school като използвате настройките за локал по подразбиране на вашия екземпляр и кодирането на знаци UTF8:

CREATE DATABASE school ENCODING 'UTF8';

Това ще създаде вашата нова база данни с помощта на предоставените от вас спецификации.



Списък на съществуващите бази данни

За да определите кои бази данни са налични в момента на вашия сървър или клъстер, можете да използвате следния SQL израз:

SELECT datname FROM pg_database;

Това ще изброи всяка от базите данни, дефинирани в момента в средата:

  datname----------- _dodb template1 template0 defaultdb school(5 rows)

Както бе споменато по-горе, ако сте свързани с помощта на psql клиент, можете също да получите тази информация \l мета-команда:

\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)

school база данни, която създадохме, се показва сред другите бази данни в системата. Това е добър начин да получите общ преглед на базите данни във вашия сървър или клъстер.



Създаване на таблици в бази данни

След като създадете една или повече бази данни, можете да започнете да дефинирате таблици за съхранение на вашите данни. Таблиците се състоят от име и дефинирана схема, която определя полетата и типовете данни, които всеки запис трябва да съдържа.


PostgreSQL CREATE TABLE синтаксис

Можете да създавате таблици с помощта на CREATE TABLE изявление. Опростеният основен синтаксис за командата изглежда по следния начин:

CREATE TABLE table_name (    column_name TYPE [column_constraint],    [table_constraint,]);

Компонентите на горния синтаксис включват следното:

  • CREATE TABLE table_name :Основният оператор за създаване, който сигнализира, че искате да дефинирате таблица. table_name заместителят трябва да бъде заменен с името на таблицата, която искате да използвате.
  • column_name TYPE :Дефинира основна колона в таблицата. column_name заместителят трябва да бъде заменен с името, което искате да използвате за вашата колона. TYPE определя типа данни PostgreSQL за колоната. Данните, съхранявани в таблицата, трябва да отговарят на структурата на колоните и типовете данни на колоните, за да бъдат приети.
  • column_constraint :Ограниченията в колоната са незадължителни ограничения за добавяне на допълнителни ограничения върху данните, които могат да се съхраняват в колоната. Например, можете да изисквате записите да не са нулеви, уникални или положителни цели числа.
  • table_constraints :Ограниченията в таблицата са подобни на ограниченията за колони, но включват взаимодействието на множество колони. Например, можете да имате ограничение на таблицата, което проверява дали DATE_OF_BIRTH е преди DATE_OF_DEATH в таблица.


Създавайте таблици условно с IF NOT EXISTS клауза

По подразбиране, ако се опитате да създадете таблица в PostgreSQL, която вече съществува в базата данни, ще възникне грешка. За да заобиколите този проблем в случаите, когато искате да създадете таблица, ако тя не присъства, но просто да продължите, ако вече съществува, можете да използвате IF NOT EXISTS клауза. IF NOT EXISTS незадължителен квалификатор, който казва на PostgreSQL да игнорира израза, ако базата данни вече съществува.

За да използвате IF NOT EXISTS клауза, вмъкнете го в командата след CREATE TABLE синтаксис и преди името на таблицата:

CREATE TABLE IF NOT EXISTS table_name (    column_name TYPE [column_constraint],    [table_constraint,]);

Този вариант ще се опита да създаде таблицата. Ако таблица с това име вече съществува в посочената база данни, PostgreSQL ще изведе предупреждение, което показва, че името на таблицата вече е заето, вместо да се провали с грешка.



Как да създавате таблици в PostgreSQL

Горният синтаксис е достатъчен за създаване на основни таблици. Като пример ще създадем две таблици в нашето school база данни. Една таблица ще се нарича supplies а другият ще се нарича teachers :

В supplies таблица, искаме да имаме следните полета:

  • ИД: Уникален идентификационен номер за всеки тип училищни принадлежности.
  • Име: Името на конкретен учебен предмет.
  • Описание: Кратко описание на артикула.
  • Производител: Името на производителя на артикула.
  • Цвят: Цветът на артикула.
  • Рекламни наличности: Броят на артикулите, с които разполагаме за определен вид училищни принадлежности. Това никога не трябва да е по-малко от 0.

Можем да създадем supplies таблица с горните качества, използвайки следния SQL.

Първо, преминете към school база данни, която сте създали с psql като напишете:

\c school

Това ще промени базата данни, към която ще бъдат насочени бъдещите ни команди. Вашата подкана трябва да се промени, за да отразява базата данни.

След това създайте supplies таблица със следното изявление:

CREATE TABLE supplies (  id INT PRIMARY KEY,  name VARCHAR,  description VARCHAR,  manufacturer VARCHAR,  color VARCHAR,  inventory int CHECK (inventory > 0));

Това ще създаде supplies таблица в school база данни. PRIMARY KEY Ограничението на колоната е специално ограничение, използвано за обозначаване на колони, които могат уникално да идентифицират записи в таблицата. Като такова, ограничението указва, че колоната не може да бъде нула и трябва да бъде уникална. PostgreSQL създава индекси за колони с първичен ключ, за да увеличи скоростта на заявките.

Проверете дали новата таблица е налице, като напишете:

\dt
          List of relations Schema |   Name   | Type  |  Owner  --------+----------+-------+--------- public | supplies | table | doadmin(1 row)

Проверете дали схемата отразява планирания дизайн, като напишете:

\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)

Можем да видим всяка от колоните и типовете данни, които посочихме. Ограничението на колоната, което дефинирахме за inventory колоната е посочена към края.

След това ще създадем teachers маса. В тази таблица трябва да присъстват следните колони:

  • Идентификационен номер на служител :Уникален идентификационен номер на служител.
  • Име :Името на учителя.
  • Фамилия :Фамилия на учителя.
  • Тема :Предметът, който учителят е нает да преподава.
  • Ниво на степен :Нивото на класа на учениците, които преподавателят е нает да преподава.

Създайте teachers таблица с горната схема със следния SQL:

CREATE TABLE teachers (  id INT PRIMARY KEY,  first_name VARCHAR,  last_name VARCHAR,  subject VARCHAR,  grade_level int);


Как да създавате таблици с първични и външни ключове

Можете да намерите информация за създаване на таблици с първични и външни ключове в някои от другите ни ръководства за PostgreSQL. Първичните и външните ключове са и двата типа ограничения на базата данни в PostgreSQL.

Първичният ключ е специална колона или колона, която гарантирано е уникална за всички редове в една и съща таблица. Всички първични ключове могат да се използват за уникално идентифициране на конкретен ред. Първичните ключове не само гарантират, че всеки ред има уникална стойност за колоните с първичен ключ, но също така гарантират, че нито един ред не съдържа NULL стойности за тази колона. Често първичният ключ в PostgreSQL използва следния формат, за да посочи автоматично присвоен нарастващ първичен ключ:id SERIAL PRIMARY KEY .

Външните ключове са начин да се гарантира, че колона или колони в една таблица съответстват на стойностите, съдържащи се в друга таблица. Това помага да се осигури референтна цялост между таблиците.




Как да преглеждате таблици в PostgreSQL

В PostgreSQL можете да изброите таблици по няколко различни начина в зависимост от това каква информация търсите.

Ако искате да видите какви таблици са налични във вашата база данни, можете да използвате \dt мета-команда, включена в psql клиент да изброи всички таблици, както демонстрирахме по-горе:

\dt
          List of relations Schema |   Name   | Type  |  Owner--------+----------+-------+--------- public | supplies | table | doadmin public | teachers | table | doadmin(2 rows)

Можете също да проверите дали схемата за таблицата съответства на вашите спецификации:

\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 таблицата изглежда отговаря на нашата дефиниция.



Промяна на таблици

Ако трябва да промените схемата на съществуваща таблица в PostgreSQL, можете да използвате ALTER TABLE команда. ALTER TABLE командата е много подобна на CREATE TABLE команда, но работи върху съществуваща таблица.


Промяна на синтаксиса на таблицата

Основният синтаксис за модифициране на таблици в PostgreSQL изглежда така:

ALTER TABLE <table_name> <change_command> <change_parameters>

<change_command> посочва точния тип промяна, която искате да направите, независимо дали включва задаване на различни опции в таблицата, добавяне или премахване на колони, или промяна на типове или ограничения. <change_parameters> част от командата съдържа всякаква допълнителна информация, необходима на PostgreSQL, за да завърши промяната.



Добавяне на колони към таблици

Можете да добавите колона към PostgreSQL таблица с ADD COLUMN команда за промяна. Параметрите за промяна ще включват името на колоната, типа и опциите, точно както бихте ги посочили в CREATE TABLE команда.

Например, за да добавите колона, наречена missing_column на text въведете в таблица, наречена some_table , бихте написали:

ALTER TABLE some_table ADD COLUMN missing_column text;


Премахване на колони от таблици

Ако вместо това искате да премахнете съществуваща колона, можете да използвате DROP COLUMN вместо това команда. Трябва да посочите името на колоната, която искате да премахнете като параметър за промяна:

ALTER TABLE some_table DROP COLUMN useless_column;


Промяна на типа данни на колона

За да промените типа данни, който PostgreSQL използва за конкретна колона, можете да използвате ALTER COLUMN команда за промяна с SET DATA TYPE команда колона. Параметрите включват името на колоната, нейния нов тип и незадължителен USING клауза, за да посочите как старият тип трябва да бъде преобразуван в нов тип.

Например, за да зададете стойността на id колона в resident таблица към int използвайки изрично прехвърляне, можем да напишем следното:

ALTER TABLE resident ALTER COLUMN id SET DATA TYPE int USING id::int;


Други промени в таблицата

Много други видове промени могат да бъдат постигнати с ALTER TABLE команда. За повече информация относно наличните опции вижте официалната документация на PostgreSQL за ALTER TABLE .




Изпускане на таблици

Ако искате да изтриете таблица, можете да използвате DROP TABLE SQL изявление. Това ще изтрие таблицата, както и всички данни, съхранявани в нея.

Основният синтаксис изглежда така:

DROP TABLE table_name;

Това ще изтрие таблицата, ако съществува, и ще изведе грешка, ако името на таблицата не съществува.

Ако искате да изтриете таблицата, ако тя съществува, и да не правите нищо, ако не съществува, можете да включите IF EXISTS квалификатор в изявлението:

DROP TABLE IF EXISTS table_name;

Таблици, които имат зависимости от други таблици или обекти, не могат да бъдат изтрити по подразбиране, докато тези зависимости съществуват. За да избегнете грешката, можете по желание да включите CASCADE параметър, който автоматично премахва всички зависимости заедно с таблицата:

DROP TABLE table_name CASCADE;

Ако някои таблици имат външен ключ ограничение, което препраща към таблицата, която изтривате, това ограничение автоматично ще бъде изтрито.

Изтрийте supplies таблица, която създадохме по-рано, като напишем:

DROP TABLE supplies;

Ще запазим teachers база данни, за да демонстрира, че изразът за изтриване на бази данни също премахва всички дъщерни обекти като таблици.



Изхвърляне на бази данни

DROP DATABASE оператор казва на PostgreSQL да изтрие посочената база данни. Основният синтаксис изглежда така:

DROP DATABASE database_name;

Заменете database_name заместител с името на базата данни, която искате да премахнете. Това ще изтрие базата данни, ако бъде намерена. Ако базата данни не може да бъде намерена, ще възникне грешка:

DROP DATABASE some_database;
ERROR:  database "some_database" does not exist

Ако искате да изтриете базата данни, ако тя съществува и по друг начин да не правите нищо, включете незадължителния IF EXISTS опция:

DROP DATABASE IF EXISTS some_database;
NOTICE:  database "some_database" does not exist, skippingDROP DATABASE

Това ще премахне базата данни или ще направи нищо, ако не може да бъде намерена.

За да премахнете school база данни, която използвахме в това ръководство, избройте съществуващите бази данни във вашата система:

\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)

Отворете нова връзка с една от базите данни, които не желаете да изтриете:

\c defaultdb

След като се отвори новата връзка, изтрийте school база данни със следната команда:

DROP DATABASE school;

Това ще премахне school база данни заедно с teachers таблица, дефинирана вътре.

Ако сте следвали с SQL, можете да приключите тук или да преминете към заключението. Ако искате да научите как да създавате и изтривате бази данни от командния ред, продължете към следващия раздел.



Използване на административни инструменти за команден ред за създаване и изтриване на бази данни

Ако имате шел достъп до сървъра или клъстера, където е инсталиран PostgreSQL, може да имате достъп до някои допълнителни инструменти на командния ред, които могат да ви помогнат при създаването и изтриването на бази данни. createdb и dropdb командите са в пакет с PostgreSQL, когато е инсталиран.


Създайте нова база данни от командния ред

Основният синтаксис за createdb команда (която трябва да се изпълнява от системен потребител с администраторски достъп до PostgreSQL) е:

createdb db_name

Това ще създаде база данни, наречена db_name в PostgreSQL, като използвате настройките по подразбиране.

Командата също така приема опции за промяна на поведението си, подобно на SQL варианта, който видяхте по-рано. Можете да научите повече за тези опции с man createdb . Някои от най-важните опции са:

  • --encoding= :задава кодирането на знаци за базата данни.
  • --locale= :задава локала за базата данни.

Те могат да помогнат да се гарантира, че базата данни може да съхранява данни във форматите, които планирате да поддържате, и с предпочитанията за локализация на вашия проект.

Например, за да сте сигурни, че вашата база данни е създадена с поддръжка на Unicode и за да замените собствения локал на сървъра, за да използвате локализация на американски английски, можете да въведете:

createdb --encoding=UTF8 --locale=en_US db_name

Ако приемем, че имате правилните разрешения, базата данни ще бъде създадена според вашите спецификации.

За да следвате примерите в това ръководство, можете да създадете база данни, наречена school използвайки локала по подразбиране и кодирането на знаци UTF8, като напишете:

createdb --encoding=UTF8 school

След това можете да се свържете с базата данни с помощта на psql за да настроите масите си както обикновено.



Изхвърлете базите данни от командния ред

dropdb командата отразява DROP DATABASE SQL изявление. Той има следния основен синтаксис:

dropdb database_name

Променете database_name заместител за препратка към базата данни, която искате да изтриете.

По подразбиране тази команда ще доведе до грешка, ако посочената база данни не може да бъде намерена. За да избегнете това, можете да включите незадължителния --if-exists флаг:

dropdb --if-exists database_name

Това ще изтрие посочената база данни, ако съществува. В противен случай няма да направи нищо.

За да изтриете school база данни, която създадохме по-рано, въведете:

dropdb school

Това ще премахне базата данни и всички дъщерни елементи, като таблици, вътре.




Заключение

Тази статия обхваща основите на това как да създавате и изтривате бази данни и таблици в PostgreSQL. Това са някои от най-основните команди, необходими за настройване на система от база данни и за определяне на структурата на вашите данни.

Както споменахме по-рано, SQL операторите, обхванати в този урок за PostgreSQL, особено CREATE TABLE изявление, имат много допълнителни параметри, могат да се използват за промяна на поведението на PostgreSQL. Можете да научите повече за тях, като разгледате официалната документация на PostgreSQL.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ГРЕШКА:няма уникално ограничение, съответстващо на дадени ключове за реферираната лента на таблицата

  2. Как да инсталирате PostgreSQL на macOS

  3. SpringBoot+Kotlin+Postgres и JSONB:org.hibernate.MappingException:Няма диалектно съпоставяне за JDBC тип

  4. Как да инсталирам pg gem на PostgreSQL на Ubuntu?

  5. Заключете за SELECT, така че друг процес да не получи стари данни