Komme i gang med PostgreSQL. Hvordan kan jeg se hvilken versjon av PostgreSQL som kjører? Bruke den innebygde hjelpen for kommandoer

PostgreSQL er en objektrelasjonell DBMS på tvers av plattformer med åpen kildekode. Denne artikkelen vil vise deg hvordan du installerer PostgreSQL i Ubuntu Linux, koble til den og utfør et par enkle SQL-spørringer, samt hvordan du setter opp sikkerhetskopier.

For å installere PostgreSQL 9.2 på Ubuntu 12.10, kjør følgende kommandoer:

sudo apt-add-repository ppa:pitti/ postgresql
sudo apt-get oppdatering
sudo apt-get install postgresql-9.2

La oss prøve å jobbe med DBMS gjennom skallet:

sudo -u postgres psql

La oss skape testbase data og testbruker:

CREATE DATABASE test_database;
LAG BRUKER test_bruker MED passord "qwerty" ;
GIR ALLE PÅ DATABASE test_database TIL test_user;

For å gå ut av skallet, skriv inn kommandoen \q .

La oss nå prøve å jobbe med den opprettede databasen på vegne av test_user:

psql -h localhost test_database test_user

La oss lage en ny tabell:

CREATE SEQUENCE user_ids;
CREATE TABLE-brukere (
id INTEGER PRIMÆR NØKKEL STANDARD NEXTVAL ("user_ids") ,
pålogging CHAR(64) ,
passord CHAR(64));

Vær oppmerksom på at, i motsetning til noen andre DBMS-er, har ikke PostgreSQL kolonner med egenskapen auto_increment. I stedet bruker Postgres sekvenser. På dette øyeblikket Det er nok å vite at ved å bruke nextval-funksjonen kan vi få unike tall for en gitt sekvens:

VELG NEXTVAL ("bruker_id" );

Ved å sette standardverdien for id-feltet til brukertabellen til NEXTVAL("bruker-ID"), har vi oppnådd samme effekt som auto_increment gir. Når vi legger til nye poster i tabellen, kan det hende vi ikke spesifiserer en id, fordi en unik id vil bli generert automatisk. Flere tabeller kan bruke samme sekvens. På denne måten kan vi garantere at verdiene til enkelte felt i disse tabellene ikke overlapper hverandre. Slik sett er sekvenser mer fleksible enn auto_increment.

Den nøyaktig samme tabellen kan lages ved å bruke bare én kommando:

LAG TABELL brukere2 (
id SERIE PRIMÆR NØKKEL ,
pålogging CHAR(64) ,
passord CHAR(64));

I dette tilfellet opprettes sekvensen for id-feltet automatisk.

Ved å bruke \d kommandoen kan du se en liste over alle tilgjengelige bord, og bruk \d brukere - se beskrivelsen av brukertabellen. Hvis du ikke får informasjonen du leter etter, prøv \d+ i stedet for \d . Du kan få en liste over databaser med kommandoen \l, og bytte til en bestemt database med kommandoen \c dbname. For å vise kommandohjelp, si \? .

Det er viktig å merke seg at PostgreSQL konverterer tabell- og kolonnenavn til små bokstaver som standard. Hvis du ikke vil ha denne oppførselen, kan du bruke doble anførselstegn:

LAG TABELL "annen tabell" ("someValue" VARCHAR (64 ) );

En annen funksjon ved PostgreSQL som kan forårsake vanskeligheter når du begynner å jobbe med dette DBMS er de såkalte "skjemaene". Et skjema er noe som et navneområde for tabeller, som en katalog med tabeller i en database.

Opprette et skjema:

LAG SCHEMA bestillinger;

Bytt til opplegg:

SET søk_sti TIL bestillinger;

Vis liste eksisterende ordninger du kan bruke \dn-kommandoen. Standardskjemaet er kalt offentlig. I prinsippet kan du med hell bruke PostgreSQL uten å vite om eksistensen av skjemaer. Men når du jobber med eldre kode, og i noen edge-tilfeller, kan det være veldig nyttig å vite om skjemaer.

Ellers er det ikke mye forskjellig å jobbe med PostgreSQL fra å jobbe med andre relasjons-DBMS:

INSERT INTO brukere (pålogging, passord)
VERDIER ("afiskon", "123456");
VELG * FRA brukere;

Hvis du nå prøver å koble til Postgres fra en annen maskin, vil du mislykkes:

psql -h 192.168.0.1 testdatabase testbruker

Psql: kunne ikke koble til server: Tilkobling nektet
Kjører serveren på vert "192.168.0.1" og godtar
TCP/IP-tilkoblinger på port 5432?

For å fikse dette, legg til linjen:

listen_addresses = "localhost,192.168.0.1"

...til filen /etc/postgresql/9.2/main/postgresql.conf også.

  • Opplæringen

Jeg ønsket å lage en fantastisk, omfattende Komme i gang-manual uten lo, men inkludert de grunnleggende godbitene for nybegynnere på PostgreSQL-systemet i Linux.

PostgreSQL er et objektrelasjonelt databasestyringssystem (ORDBMS) basert på POSTGRES, versjon 4.2, utviklet ved University of California, Berkeley, Department of Computer Science.

PostgreSQL er åpen kilde etterkommer av den originale Berkeley-koden. Den støtter det meste av SQL-standarden og tilbyr mange moderne funksjoner:

  • Komplekse spørsmål
  • Håndtere samtidighet med multiversjon
I tillegg kan PostgreSQL utvides av brukeren på mange måter, for eksempel ved å legge til nye
  • datatyper
  • funksjoner
  • operatører
  • aggregerte funksjoner
  • metodeindeks
  • prosessuelle språk

Montering og installasjon

Som alle fans av mainstream PostgreSQL, vil vi selvfølgelig samle inn og ikke laste ned ferdige pakker (i Debian-repositoriene er det for eksempel ingen siste versjon). Det er mange versjoner, selvfølgelig er det best å laste ned den nyeste. På tidspunktet for skriving av dette innlegget er dette versjon 9.2.2

Wget http://ftp.postgresql.org/pub/source/v9.2.2/postgresql-9.2.2.tar.gz tar xzf postgresql-9.2.2.tar.gz
Nå har vi en katalog med kildene til denne fantastiske databasen.
Som standard vil databasefilene bli installert i katalogen /usr/local/pgsql, men denne katalogen kan endres ved å sette

Prefiks=/bane/til/pgsql
før kommandoen ./configure
Før du bygger, kan du spesifisere C++-kompilatoren

Eksporter CC=gcc
PostgeSQL kan bruke readline-biblioteket, hvis du ikke har det og ikke vil installere det, bare spesifiser alternativet

Uten leselinje
Jeg håper alle har Autotools? Så videre til forsamlingen:

Cd postgresql-9.2.2 ./configure --without-readline sudo gjør installeringen ren
Alle herrer! Gratulerer!

Innstillinger

Vi må spesifisere datalagringen til databasene våre (cluster) og starte den.

Det er ett forbehold - eieren av datakatalogen og brukeren som kan starte databasen må ikke være root. Dette gjøres for systemsikkerhetsformål. La oss derfor opprette en spesiell bruker
sudo useradd postgres -p postgres -U -m
Og da er alt klart

Sudo chown -R postgres:postgres /usr/local/pgsql
En viktig prosess. Vi må initialisere databaseklyngen. Vi må gjøre dette på vegne av postgres-brukeren

Initdb -D /usr/local/pgsql/data
Nå må du legge til PostgreSQL-start til autostart. Det finnes et ferdig script for dette og det ligger i postgresql-9.2.2/contrib/start-scripts/linux
Du kan åpne denne filen og ta hensyn til følgende variabler:

  • prefiks- dette er stedet hvor vi installerte PostgreSQL og spesifiserte det i ./configure
  • PGDATA- det er her databaseklyngen er lagret og hvor vår postgres-bruker skal ha tilgang
  • PGUSER- Dette er den samme brukeren som alt vil fungere på vegne av
Hvis alt er riktig, legg til skriptet vårt til init.d

Sudo cp ./postgresql-9.2.2/contrib/start-scripts/linux /etc/init.d/postgres sudo update-rc.d postgres standardinnstillinger
Vi starter systemet på nytt for å sjekke at skriptet vårt fungerer.
Tast inn

/usr/local/pgsql/bin/psql -U postgres
Og hvis et vindu for å jobbe med databasen vises, var oppsettet vellykket! Gratulerer!
Som standard opprettes en database kalt postgres

# TYPE DATABASE BRUKERADRESSE METODE lokal alle alle trust vert alle alle 127.0.0.1/32 truster alle alle::1/128 trust
Den første linjen er ansvarlig for lokal tilknytning, den andre er for en tilkobling som bruker IPv4-protokollen, og den tredje er for IPv6-protokollen.
Mest siste parameter– dette er akkurat autorisasjonsmetoden. La oss se på det (bare de viktigste)

  • tillit- tilgang til databasen kan fås av alle under et hvilket som helst navn som har en tilknytning til den.
  • avvise- avslå ubetinget! Dette er egnet for filtrering av spesifikke IP-adresser
  • passord- krever et obligatorisk passord. Ikke egnet for lokale brukere, bare brukere opprettet av CREATE USER-kommandoen
  • ident- lar bare brukeren som er registrert i filen /usr/local/pgsql/data/pg_ident.conf opprette en tilkobling til databasen.
Jeg vil kort fortelle deg om de viktigste verktøyene som vil være nyttige i arbeidet ditt.

Verktøy for å jobbe med databasen

pg_config
Returnerer informasjon om gjeldende installert versjon PostgreSQL.
initdb
Initialiserer et nytt datalager (databaseklynge). En klynge er en samling databaser som administreres av én serverforekomst. initdb må kjøres som den fremtidige eieren av serveren (som angitt ovenfor som postgres).
pg_ctl
Styrer arbeidsprosessen PostgreSQL-servere. Lar deg starte, starte på nytt, stoppe serveren, spesifisere en loggfil og mer.
psql
Klient for arbeid med en database. Lar deg utføre SQL-operasjoner.
opprettetb
Oppretter en ny database. Som standard opprettes databasen på vegne av brukeren som kjører kommandoen. For å spesifisere en annen må du imidlertid bruke alternativet -O (hvis brukeren har de nødvendige rettighetene til å gjøre det). I hovedsak er det en SQL-innpakning for CREATE DATABASE-kommandoen.
dropdb
Sletter databasen. Er en SQL-innpakning for kommandoen DROP DATABASE.
Opprett bruker
Legger til en ny databasebruker. Er en SQL-innpakning for CREATE ROLE-kommandoen.
dropuser
Sletter en databasebruker. Er en SQL-innpakning for kommandoen DROP ROLE.
createlang
Legger til nytt språk programmering inn i PostgreSQL-databasen. Er en SQL-innpakning for CREATE LANGUAGE-kommandoen.
droplang
Fjerner et programmeringsspråk. Er en SQL-innpakning for kommandoen DROP LANGUAGE.
pg_dump
Oppretter en sikkerhetskopi (dump) av databasen til en fil.
pg_restore
Gjenoppretter en databasesikkerhetskopi (dump) fra en fil.
pg_dumpall
Oppretter en sikkerhetskopi (dump) av hele klyngen til en fil.
reindexdb
Re-indekserer databasen. Er en SQL-innpakning for REINDEX-kommandoen.
clusterdb
Rekluster tabeller i databasen. Er en SQL-innpakning for CLUSTER-kommandoen.
vakuumdb
Søppelsamler og databaseoptimaliserer. Er en SQL-innpakning for VACUUM-kommandoen.

Databaseansvarlige

Når det gjelder databasebehandleren, altså php manager- Dette

I denne artikkelen vil jeg vise 15 av de fleste nyttige kommandoer For kjøring postgreSQL.

1. Hvordan endre root-passord i PostgreSQL?

$ /usr/local/pgsql/bin/psql postgres postgres Passord: (gammelt passord) # ENDRE BRUKER postgres MED PASSORD 'tmppassword'; $ /usr/local/pgsql/bin/psql postgres postgres Passord: (tmppassword)

Endring av passord for en vanlig bruker skjer på samme måte. root-bruker kan endre passordet for enhver bruker.

# ENDRE BRUKER brukernavn MED PASSORD 'tmppassword';

2. Hvordan installerer jeg PostgreSQL i autostart?

$ su - root # tar xvfz postgresql-8.3.7.tar.gz # cd postgresql-8.3.7 # cp contrib/start-scripts/linux /etc/rc.d/init.d/postgresql # chmod a+x / etc/rc.d/init.d/postgresql

3. Sjekk serverstatusen

$ /etc/init.d/postgresql status Passord: pg_ctl: serveren kjører (PID: 6171) /usr/local/pgsql/bin/postgres “-D” “/usr/local/pgsql/data” [ Kommentar: Denne meldingen indikerer at serveren kjører og fungerer normalt] $ /etc/init.d/postgresql status Passord: pg_ctl: ingen server som kjører [ Kommentar: Denne meldingen indikerer at serveren ikke kjører]

4. Hvordan starte, stoppe, starte PostgreSQL på nytt?

# tjeneste postgresql stopp Stopper PostgreSQL: server stoppet ok # tjeneste postgresql start Starter PostgreSQL: ok # service postgresql omstart Starter PostgreSQL på nytt: server stoppet ok

5. Hvordan kan jeg se hvilken versjon av PostgreSQL som kjører?

$ /usr/local/pgsql/bin/psql test Velkommen til psql 8.3.7, den interaktive PostgreSQL-terminalen. Skriv inn: \copyright for distribusjonsvilkår \h for hjelp med SQL-kommandoer \? for hjelp med psql-kommandoer \g eller avslutt med semikolon for å utføre spørringen \q for å avslutte test=# velg versjon(); versjon ———————————————————————————————— PostgreSQL 8.3.7 på i686-pc-linux-gnu, kompilert av GCC gcc (GCC) 4.1.2 20071124 (Red Hat 4.1.2-42) (1 rad) test=#

5. Hvordan opprette en bruker i PostgreSQL?

Det er to metoder for dette..

Metode 1: Vi oppretter en bruker ved å bruke PSQL-skallet ved å bruke CREATE USER-kommandoen.

# LAG BRUKER ramesh MED passord 'tmppassword'; LAG ROLLE

Metode2: Vi oppretter en bruker ved å bruke createuser shell-kommandoen.

$ /usr/local/pgsql/bin/createuser sathiya Skal den nye rolle være en superbruker? (y/n) n Skal den nye rollen få lov til å lage databaser? (y/n) n Skal den nye rollen få skape flere nye roller? (y/n) n LAG ROLLE

6. Hvordan lage en database i PostgreSQL?

Det er 2 metoder for dette.

Metode1: Vi lager en database gjennom et PSQL-skall ved å bruke CREATE DATABASE-kommandoen.

# LAG DATABASE mydb MED EIER ramesh; LAG DATABASE

Metode2: Vi bruker kommandoen createb.

$ /usr/local/pgsql/bin/createdb mydb -O ramesh LAG DATABASE

7. Får vi en liste over alle databaser i Postgresql?

# \l Liste over databaser Navn | Eier | Koding ———-+———-+———- backup | postgres | UTF8 mydb | ramesh | UTF8 postgres | postgres | UTF8 mal0 | postgres | UTF8 mal1 | postgres | UTF8

8. Hvordan sletter jeg en database i PostgreSQL?

# \l Liste over databaser Navn | Eier | Koding ———-+———-+———- backup | postgres | UTF8 mydb | ramesh | UTF8 postgres | postgres | UTF8 mal0 | postgres | UTF8 mal1 | postgres | UTF8# DROP DATABASE mydb; DROPPE DATABASE

9. Bruk den innebygde hjelpen for kommandoer

Team \? vil vise en hjelpelinje for PSQL-kommandoen. \h CREATE vil vise hjelp for alle kommandoer som starter med CREATE.

# \? # \h LAG # \h LAG INDEKS

10. Hvordan få en liste over alle tabeller i en gitt database i Postgresql?

# \d

Til tom base du vil motta meldingen "Ingen relasjoner funnet."

11. Hvordan kan jeg finne ut forespørselsgjennomføringstiden?

# \timing - etter å ha utført denne kommandoen, vil hver påfølgende forespørsel vise utførelsestiden.

# \timing Timing er på. # VELG * fra pg_catalog.pg_attribute ; Tid: 9.583 ms

12. Hvordan sikkerhetskopiere og gjenopprette databaser og tabeller i PostgreSQL?

Dette spørsmålet er ganske stort og jeg vil publisere det senere i en egen artikkel.

13. Hvordan se listen over tilgjengelige funksjoner i PostgreSQL?

For å få listen tilgjengelige funksjoner, si \df+

# \df # \df+

14. Hvordan redigere en PostgreSQL-spørring i editoren?

# \e

\e vil åpne en editor der du kan redigere spørringen og lagre den.

15. Hvor finner jeg postgreSQL-historikkfilen?

Som ~/.bash_history-filen, lagrer postgreSQL alt sql kommandoer i filen ~/.psql_history.

$ cat ~/.psql_history endre brukerpostgres med passord 'tmppassword'; \h endre brukervelg versjon(); opprette bruker ramesh med passord 'tmppassword'; \timing velg * fra pg_catalog.pg_attribute;

Systemadministrasjon

Denne posten - korte instruksjoner for nybegynnere, for de som installerte PostgreSQL for første gang. Alt er her nødvendig informasjon for å komme i gang med PostgreSQL.

Kobler til DBMS

Det første du må gjøre er å få tilgang til PostgreSQL, tilgang som superbruker.
Autentiseringsinnstillinger er plassert i filen pg_hba.conf.
  1. lokale alle postgres jevnaldrende
Denne linjen sier at postgres-brukeren kan koble til en hvilken som helst lokal database PostgreSQL DBMS via stikkontakt. Det er ikke nødvendig å angi et passord. Operativsystemet vil overføre brukernavnet, og det vil bli brukt til autentisering.
La oss koble til:
  1. $ sudo -u postgres psql postgres postgres
For å kunne koble til via nettverket, må du legge til linjen til pg_hdba.conf:
  1. # TYPE DATABASE BRUKERADRESSE METODE
  2. hostssl alle alle 0.0.0.0/0 md5
Autentiseringsmetode md5 betyr at du må angi et passord for å koble til. Dette er ikke veldig praktisk hvis du bruker psql-konsollen ofte. Hvis du ønsker å automatisere noen handlinger, er den dårlige nyheten at psql ikke aksepterer et passord som argument. Det er to måter å løse disse problemene på: angi riktig miljøvariabel og lagre passordet i en spesiell .pgpass-fil.

Innstilling av miljøvariabelen PGPASSWORD

Jeg vil si med en gang at det er bedre å ikke bruke denne metoden, fordi noen OS lar deg se vanlige brukere Miljøvariabler via ps. Men hvis du vil, må du skrive i terminalen:
  1. eksport PGPASSWORD=mypasswd
Variabelen vil være tilgjengelig i gjeldende økt. Hvis du trenger å angi en variabel for alle økter, må du legge til linjen fra eksemplet til .bashrc- eller .bash_profile-filen

Lagre passordet i .pgpass-filen

Hvis vi snakker om Linux, bør filen ligge i $HOME (/home/brukernavn). Kun eier (0600) må ha skrive- og leserett. Du må skrive linjer som dette til filen:
  1. vertsnavn:port:database:brukernavn:passord
Du kan skrive "*" i de fire første feltene, noe som betyr ingen filtrering (fullt utvalg).

Får hjelpeinformasjon

\? - vil gi bort alt tilgjengelige kommandoer sammen med deres korte beskrivelse,
\h - vil vise en liste over alle tilgjengelige søk,
\h CREATE - vil gi hjelp til en spesifikk forespørsel.

DBMS brukeradministrasjon

Hvordan få en liste over PostgreSQL-brukere? Eller du kan spørre pg_user-tabellen.
  1. VELG * FRA pg_user ;

Opprette en ny PostgreSQL-bruker

Fra psql-skallet kan dette gjøres ved å bruke CREATE-kommandoen.
  1. LAG BRUKER brukernavn MED passord "passord" ;
Eller du kan bruke terminalen.
  1. createuser -S -D -R -P brukernavn
Du vil bli bedt om å angi et passord.

Endring av brukerpassord

  1. ENDRE BRUKER brukernavn MED PASSORD "passord" ;

Endre brukerroller

For å gi brukeren tillatelse til å opprette databaser, kjør følgende spørring:
  1. ALTER ROLE brukernavn MED CREATEDB ;

Database ledelse

Vise en liste over databaser i psql-terminalen: Det samme fra Linux-terminalen:
  1. psql -l
Opprette en database fra psql (PostgreSQL Terminal)
  1. LAG DATABASE dbname EIER dbadmin ;
Opprettelse ny base data ved hjelp av terminalen:
  1. createb -O brukernavn dbname;

Sette opp databasetilgangsrettigheter

Hvis brukeren er eieren av databasen, har han alle rettigheter. Men hvis du ønsker å gi tilgang til en annen bruker, kan du gjøre dette ved å bruke GRANT-kommandoen. Spørringen nedenfor lar brukeren koble seg til databasen. Men ikke glem konfigurasjonsfil pg_hba.conf, må den også ha de riktige tilkoblingstillatelsene.
  1. GIR KOBLING PÅ DATABASE dbname TIL dbadmin ;