sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan opretter og sletter du databaser og tabeller i PostgreSQL


Introduktion

PostgreSQL og andre relationelle databasestyringssystemer bruger databaser og tabeller at strukturere og organisere deres data. Vi kan hurtigt gennemgå definitionen af ​​disse to udtryk:

  • databaser: adskille forskellige sæt strukturer og data fra hinanden
  • tabeller: definere datastrukturen og gemme de faktiske dataværdier i databaser

I PostgreSQL er der også et mellemliggende objekt mellem databaser og tabeller kaldet skema :

  • skema: et navneområde i en database, der indeholder tabeller, indekser, visninger og andre elementer.

Denne guide vil ikke beskæftige sig direkte med PostgreSQL's koncept for et skema, men det er godt at vide, at det er der.

I stedet vil vi fokusere på, hvordan man opretter og ødelægger PostgreSQL-databaser og tabeller. Eksemplerne vil primært bruge SQL, men mod slutningen viser vi dig, hvordan du udfører et par af disse opgaver ved hjælp af kommandolinjen. Disse alternativer bruger værktøjer inkluderet i standard PostgreSQL-installationen, som er tilgængelige, hvis du har administrativ adgang til PostgreSQL-værten.

Nogle af udsagn dækket i denne vejledning, især PostgreSQL CREATE TABLE erklæring, har mange yderligere muligheder, der var uden for denne artikels omfang. Hvis du vil have yderligere oplysninger, kan du finde ud af mere ved at tjekke den officielle PostgreSQL-dokumentation.



Forudsætninger

For at følge denne vejledning skal du logge ind på en PostgreSQL-instans med en bruger med administrative rettigheder ved hjælp af psql kommandolinjeklient. Din PostgreSQL-instans kan installeres lokalt, eksternt eller klargøres af en udbyder.

Specifikt skal din PostgreSQL-bruger bruge CREATE DB privilegium eller være en superbruger , som du kan tjekke med \du meta-kommando i psql :

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

postgres superbruger, som oprettes automatisk ved installation, har de nødvendige rettigheder, men du kan bruge enhver bruger med Opret DB privilegium.



Opret en ny database

Når du er forbundet til din PostgreSQL-instans ved hjælp af psql eller enhver anden SQL-klient, kan du oprette en database ved hjælp af SQL.

Den grundlæggende syntaks for at oprette en database er:

CREATE DATABASE db_name;

Dette vil oprette en database kaldet db_name på den aktuelle server med den aktuelle bruger indstillet som den nye databases ejer ved hjælp af standarddatabaseindstillingerne. Du kan se egenskaberne for standard skabelon1 skabelon ved hjælp af følgende psql meta-kommando:

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

Du kan tilføje yderligere parametre for at ændre den måde, din database oprettes på. Disse er nogle almindelige muligheder:

  • KODNING: indstiller tegnkodningen for databasen.
  • LC_COLLATE: indstiller sorteringen , eller sortere, rækkefølge for databasen. Dette er en lokaliseringsindstilling, der bestemmer, hvordan varer organiseres, når de bestilles.
  • LC_CTYPE: indstiller karakterklassifikationen for den nye database. Dette er en lokaliseringsindstilling, der påvirker, hvilke tegn der betragtes som store bogstaver, små bogstaver og cifre.

Disse kan hjælpe med at sikre, at databasen kan gemme data i de formater, du planlægger at understøtte, og med dit projekts lokaliseringspræferencer.

For eksempel for at sikre, at din database er oprettet med Unicode-understøttelse og for at tilsidesætte serverens egen lokalitet for at bruge amerikansk engelsk lokalisering (disse matcher alle tilfældigvis værdierne i skabelon1 vist ovenfor, så der faktisk ikke vil ske nogen ændring), kan du skrive:

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

For at følge eksemplerne i denne vejledning skal du oprette en database kaldet school ved at bruge din forekomsts standardindstillinger for lokalitet og UTF8-tegnkodningen:

CREATE DATABASE school ENCODING 'UTF8';

Dette vil oprette din nye database ved hjælp af de specifikationer, du har angivet.



List eksisterende databaser

For at bestemme, hvilke databaser der i øjeblikket er tilgængelige på din server eller klynge, kan du bruge følgende SQL-sætning:

SELECT datname FROM pg_database;

Dette vil vise hver af de databaser, der aktuelt er defineret i miljøet:

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

Som nævnt før, hvis du er tilsluttet ved hjælp af psql klient, kan du også få disse oplysninger \l meta-kommando:

\l

Dette vil vise de tilgængelige databasenavne sammen med deres ejere, kodning, lokalitetsindstillinger og privilegier:

                                  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)

skolen database, som vi har oprettet, vises blandt de andre databaser på systemet. Dette er en god måde at få et overblik over databaserne i din server eller klynge på.



Opret tabeller i databaser

Efter at have oprettet en eller flere databaser, kan du begynde at definere tabeller til at gemme dine data. Tabeller består af et navn og et defineret skema, som bestemmer de felter og datatyper, som hver post skal indeholde.


PostgreSQL OPRET TABEL syntaks

Du kan oprette tabeller ved at bruge CREATE TABLE udmelding. En forenklet grundlæggende syntaks for kommandoen ser sådan ud:

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

Komponenterne i ovenstående syntaks inkluderer følgende:

  • OPRET TABEL tabelnavn :Den grundlæggende oprettelsessætning, der signalerer, at du ønsker at definere en tabel. tabelnavn pladsholder skal erstattes med navnet på den tabel, du ønsker at bruge.
  • kolonnenavn TYPE :Definerer en grundlæggende kolonne i tabellen. column_name pladsholder skal erstattes med det navn, du ønsker at bruge til din kolonne. TYPE angiver PostgreSQL-datatypen for kolonnen. Data gemt i tabellen skal være i overensstemmelse med kolonnestrukturen og kolonnedatatyperne for at blive accepteret.
  • column_constraint :Kolonnebegrænsninger er valgfrie begrænsninger for at tilføje yderligere begrænsninger på de data, der kan gemmes i kolonnen. For eksempel kan du kræve, at indtastninger ikke er null, unikke eller positive heltal.
  • tabel_begrænsninger :Tabelbegrænsninger ligner kolonnebegrænsninger, men involverer interaktion mellem flere kolonner. For eksempel kan du have en tabelbegrænsning, der kontrollerer, at en DATE_OF_BIRTH er før DATE_OF_DEATH i en tabel.


Opret tabeller betinget med IF NOT EXISTS klausul

Som standard, hvis du forsøger at oprette en tabel i PostgreSQL, der allerede findes i databasen, vil der opstå en fejl. For at omgå dette problem i tilfælde, hvor du vil oprette en tabel, hvis den ikke er til stede, men bare fortsætte, hvis den allerede eksisterer, kan du bruge HVIS IKKE FINDER klausul. HVIS IKKE FINDER valgfri qualifier, der fortæller PostgreSQL at ignorere sætningen, hvis databasen allerede eksisterer.

For at bruge HVIS IKKE FINDER klausul, indsæt den i kommandoen efter CREATE TABLE syntaks og før tabelnavnet:

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

Denne variant vil forsøge at oprette tabellen. Hvis en tabel med det navn allerede eksisterer i den angivne database, vil PostgreSQL udsende en advarsel, der indikerer, at tabelnavnet allerede var taget i stedet for at fejle med en fejl.



Sådan opretter du tabeller i PostgreSQL

Ovenstående syntaks er nok til at skabe grundlæggende tabeller. Som et eksempel vil vi oprette to tabeller i vores skole database. Én tabel kaldes forsyninger og den anden vil blive kaldt lærere :

I forsyninger tabel, ønsker vi at have følgende felter:

  • ID: Et unikt ID for hver type skoleforsyning.
  • Navn: Navnet på et bestemt skoleelement.
  • Beskrivelse: En kort beskrivelse af varen.
  • Producent: Navnet på vareproducenten.
  • Farve: Farven på varen.
  • Beholdning: Antallet af varer vi har til en bestemt type skoleforsyning. Dette bør aldrig være mindre end 0.

Vi kan oprette forsyningerne tabel med ovenstående kvaliteter ved hjælp af følgende SQL.

Skift først til skolen database du har oprettet med psql ved at skrive:

\c school

Dette vil ændre den database, som vores fremtidige kommandoer vil målrette mod. Din prompt skulle ændre sig for at afspejle databasen.

Opret derefter forbrugsvarer tabel med følgende udsagn:

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

Dette vil oprette tilbehør tabel i skolen database. Den PRIMÆR NØGLE kolonnebegrænsning er en speciel begrænsning, der bruges til at angive kolonner, der unikt kan identificere poster i tabellen. Som sådan angiver begrænsningen, at kolonnen ikke kan være nul og skal være unik. PostgreSQL opretter indekser for primære nøglekolonner for at øge forespørgselshastigheden.

Bekræft, at den nye tabel er til stede ved at skrive:

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

Bekræft, at skemaet afspejler det tilsigtede design ved at skrive:

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

Vi kan se hver af de kolonner og datatyper, vi har angivet. Kolonnebegrænsningen, som vi definerede for beholdningen kolonnen er opført mod slutningen.

Dernæst vil vi oprette en lærer bord. I denne tabel skal følgende kolonner være til stede:

  • Medarbejder-id :Et unikt medarbejder-id.
  • Fornavn :Lærerens fornavn.
  • Efternavn :Lærerens efternavn.
  • Emne :Det fag, som læreren er ansat til at undervise i.
  • Karakterniveau :Klasseniveauet for elever, som underviseren er ansat til at undervise.

Opret lærere tabel med ovenstående skema med følgende SQL:

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


Sådan opretter du tabeller med primærnøgler og fremmednøgler

Du kan finde information om oprettelse af tabeller med primære og fremmede nøgler i nogle af vores andre PostgreSQL-vejledninger. Primære nøgler og fremmednøgler er begge typer af databasebegrænsninger i PostgreSQL.

En primærnøgle er en speciel kolonne eller kolonne, der med garanti er unik på tværs af rækker i samme tabel. Alle primære nøgler kan bruges til entydigt at identificere en specifik række. Primære nøgler sikrer ikke kun, at hver række har en unik værdi for de primære nøglekolonner, de sikrer også, at ingen rækker indeholder NULL værdier for den kolonne. Ofte bruger den primære nøgle i PostgreSQL følgende format til at specificere en automatisk tildelt stigende primærnøgle:id SERIAL PRIMARY KEY .

Fremmednøgler er en måde at sikre, at en kolonne eller kolonner i en tabel matcher værdierne i en anden tabel. Dette hjælper med at sikre referenceintegritet mellem tabeller.




Sådan får du vist tabeller i PostgreSQL

I PostgreSQL kan du liste tabeller på et par forskellige måder afhængigt af, hvilken information du leder efter.

Hvis du gerne vil se, hvilke tabeller der er tilgængelige i din database, kan du bruge \dt meta-kommando inkluderet med psql klient til at liste alle tabeller, som vi viste ovenfor:

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

Du kan også kontrollere, at skemaet for tabellen matcher dine specifikationer:

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

lærerne tabel ser ud til at matche vores definition.



Ændre tabeller

Hvis du har brug for at ændre skemaet for en eksisterende tabel i PostgreSQL, kan du bruge ALTER TABLE kommando. ALTER TABLE kommandoen ligner meget CREATE TABLE kommando, men fungerer på en eksisterende tabel.


Ændre tabelsyntaks

Den grundlæggende syntaks til at ændre tabeller i PostgreSQL ser sådan ud:

ALTER TABLE <table_name> <change_command> <change_parameters>

angiver den nøjagtige type ændring, du gerne vil foretage, uanset om det involverer indstilling af forskellige muligheder på tabellen, tilføjelse eller fjernelse af kolonner eller ændring af typer eller begrænsninger. en del af kommandoen indeholder yderligere oplysninger, som PostgreSQL har brug for for at fuldføre ændringen.



Tilføjelse af kolonner til tabeller

Du kan tilføje en kolonne til en PostgreSQL-tabel med ADD COLUMN ændre kommando. Ændringsparametrene vil omfatte kolonnenavn, type og muligheder, ligesom du ville angive dem i CREATE TABLE kommando.

For eksempel at tilføje en kolonne kaldet missing_column af teksten skriv til en tabel kaldet some_table , ville du skrive:

ALTER TABLE some_table ADD COLUMN missing_column text;


Fjernelse af kolonner fra tabeller

Hvis du i stedet ønsker at fjerne en eksisterende kolonne, kan du bruge DROP COLUMN kommando i stedet. Du skal angive navnet på den kolonne, du ønsker at slette som en ændringsparameter:

ALTER TABLE some_table DROP COLUMN useless_column;


Ændring af datatypen for en kolonne

For at ændre den datatype, som PostgreSQL bruger til en specifik kolonne, kan du bruge ALTER COLUMN skift kommando med SET DATA TYPE kolonne kommando. Parametrene inkluderer kolonnenavnet, dets nye type og en valgfri USING klausul for at specificere, hvordan den gamle type skal konverteres til den nye type.

For eksempel at indstille værdien af ​​et id kolonnen i resident tabel til en int ved at bruge en eksplicit rollebesætning kan vi skrive følgende:

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


Andre tabelændringer

Mange andre typer ændringer kan opnås med ALTER TABLE kommando. For mere information om de tilgængelige muligheder, se den officielle PostgreSQL-dokumentation for ALTER TABLE .




Droptabeller

Hvis du ønsker at slette en tabel, kan du bruge DROP TABLE SQL-sætning. Dette vil slette tabellen såvel som alle data, der er gemt i den.

Den grundlæggende syntaks ser således ud:

DROP TABLE table_name;

Dette vil slette tabellen, hvis den findes, og give en fejl, hvis tabelnavnet ikke eksisterer.

Hvis du ønsker at slette tabellen, hvis den eksisterer og ikke gøre noget, hvis den ikke eksisterer, kan du inkludere koden HVIS EKSISTERER kvalifikation i sætningen:

DROP TABLE IF EXISTS table_name;

Tabeller, der har afhængigheder til andre tabeller eller objekter, kan ikke slettes som standard, mens disse afhængigheder eksisterer. For at undgå fejlen kan du eventuelt inkludere CASCADE parameter, som automatisk fjerner alle afhængigheder sammen med tabellen:

DROP TABLE table_name CASCADE;

Hvis nogen tabeller har en fremmednøgle begrænsning, som refererer til den tabel, du sletter, vil denne begrænsning automatisk blive slettet.

Slet forbrugsvarer tabel, vi oprettede tidligere ved at skrive:

DROP TABLE supplies;

Vi beholder lærerne database for at demonstrere, at sætningen om at slette databaser også fjerner alle underordnede objekter som tabeller.



Slet databaser

DROP DATABASE sætning fortæller PostgreSQL at slette den angivne database. Den grundlæggende syntaks ser således ud:

DROP DATABASE database_name;

Erstat databasenavn pladsholder med navnet på den database, du ønsker at fjerne. Dette vil slette databasen, hvis den bliver fundet. Hvis databasen ikke kan findes, vil der opstå en fejl:

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

Hvis du ønsker at slette databasen, hvis den eksisterer og ellers ikke gør noget, skal du inkludere den valgfrie HVIS EKSISTERER mulighed:

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

Dette vil fjerne databasen eller gøre noget, hvis den ikke kan findes.

For at fjerne skolen database, som vi brugte i denne vejledning, skal du angive de eksisterende databaser på dit system:

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

Åbn en ny forbindelse til en af ​​de databaser, du ikke ønsker at slette:

\c defaultdb

Når den nye forbindelse er åben, skal du slette skolen database med følgende kommando:

DROP DATABASE school;

Dette vil fjerne skolen database sammen med lærerne tabel defineret i.

Hvis du har fulgt med ved hjælp af SQL, kan du slutte her eller springe til konklusionen. Hvis du gerne vil lære om, hvordan du opretter og sletter databaser fra kommandolinjen, skal du fortsætte til næste afsnit.



Brug af administrative kommandolinjeværktøjer til at oprette og slette databaser

Hvis du har shell-adgang til serveren eller klyngen, hvor PostgreSQL er installeret, har du muligvis adgang til nogle ekstra kommandolinjeværktøjer, der kan hjælpe med at oprette og slette databaser. createdb og dropdb kommandoer er bundtet med PostgreSQL, når det er installeret.


Opret en ny database fra kommandolinjen

Den grundlæggende syntaks for createdb kommandoen (som skal køres af en systembruger med administratoradgang til PostgreSQL) er:

createdb db_name

Dette vil oprette en database kaldet db_name i PostgreSQL ved at bruge standardindstillingerne.

Kommandoen accepterer også muligheder for at ændre dens adfærd, ligesom den SQL-variant, du så tidligere. Du kan finde ud af mere om disse muligheder med man createdb . Nogle af de vigtigste muligheder er:

  • --encoding= :indstiller tegnkodningen for databasen.
  • --locale= :indstiller lokaliteten for databasen.

Disse kan hjælpe med at sikre, at databasen kan gemme data i de formater, du planlægger at understøtte, og med dit projekts lokaliseringspræferencer.

For for eksempel at sikre, at din database er oprettet med Unicode-understøttelse og for at tilsidesætte serverens egen lokalitet for at bruge amerikansk engelsk lokalisering, kan du skrive:

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

Forudsat at du har de korrekte tilladelser, vil databasen blive oprettet i henhold til dine specifikationer.

For at følge eksemplerne i denne vejledning kan du oprette en database kaldet skole ved at bruge standardlokaliteten og UTF8-tegnkodningen ved at skrive:

createdb --encoding=UTF8 school

Du kan derefter oprette forbindelse til databasen ved hjælp af psql at sætte dine borde op som normalt.



Slip databaser fra kommandolinjen

dropdb kommandoen afspejler DROP DATABASE SQL-sætning. Den har følgende grundlæggende syntaks:

dropdb database_name

Skift databasenavn pladsholder for at referere til den database, du ønsker at slette.

Som standard vil denne kommando resultere i en fejl, hvis den angivne database ikke kan findes. For at undgå dette kan du inkludere den valgfrie --hvis-eksisterer flag:

dropdb --if-exists database_name

Dette vil slette den angivne database, hvis den eksisterer. Ellers vil det ikke gøre noget.

For at slette skolen database, vi oprettede tidligere, skriv:

dropdb school

Dette vil fjerne databasen og eventuelle underordnede elementer, såsom tabeller, indeni.




Konklusion

Denne artikel dækkede det grundlæggende i, hvordan man opretter og sletter databaser og tabeller i PostgreSQL. Dette er nogle af de mest basale kommandoer, der kræves for at opsætte et databasesystem og definere strukturen af ​​dine data.

Som tidligere nævnt dækkes SQL-sætningerne i denne PostgreSQL-øvelse, især CREATE TABLE sætning, har mange yderligere parametre kan bruges til at ændre PostgreSQL's adfærd. Du kan finde ud af mere om disse ved at tjekke den officielle PostgreSQL-dokumentation.




  1. Sådan eksporteres en liste over sammenkædede tabeller til Excel fra Access 2016

  2. SQL Server:Er det muligt at indsætte i to tabeller på samme tid?

  3. Hvordan gemmer man unicode-data til oracle?

  4. Hvorfor anses det for dårlig praksis at bruge markører i SQL Server?