sql >> Databáze >  >> RDS >> PostgreSQL

Jak pracovat s databázemi PostgreSQL

Obsah

Výpis databází
Vypsat databázi
Vypsat všechny databáze
Vypsat granty
Odstranit nebo odstranit databázi
Smazat Grant
Obnovit databázi
Obnovit Grant

PostgreSQL je vynikající alternativní databázový stroj k MySQL nebo MariaDB, ale správa těchto databází je velmi odlišná, zejména pro ty systémové administrátory, kteří jsou velmi zvyklí používat MySQL z příkazového řádku nebo PHPMyAdmin. Mnoho CMS a aplikací již ví, jak interagovat s PostgreSQL databázemi, ale stejně jako MySQL stále závisí na vás, abyste tyto databáze udržovali.

V tomto článku budeme předpokládat, že jste na svůj server vložili SSH jako uživatel „root“ a nainstalovali jste server PostgreSQL s výchozí konfigurací, která vyžaduje připojení jako uživatel „postgres“. Většina příkazů proto také použije volbu -U postgres. Tyto příkazy budou obecně totožné mezi CentOS a Ubuntu ve většině moderních verzí, ale byly testovány primárně na serveru CentOS 7 VPS a serveru Ubuntu 16.04 s PostgreSQL 9.2.

Vytváření databází a grantů je poměrně složité, ale pokud používáte cPanel, Plesk nebo jiný ovládací panel, který podporuje integraci PostgreSQL, je toto nastavení jednoduché. Vytváření těchto databází a grantů z příkazového řádku je mimo rozsah tohoto konkrétního článku, takže budeme také předpokládat, že již máte své databáze spuštěné a používané.

Seznam databází v PostgreSQL

Pomáhá znát přesné názvy databází, na kterých budete pracovat, a také provést dvojitou kontrolu, abyste se ujistili, že pracujete na správném serveru. Nejprve si uveďme databáze PostgreSQL na našem počítači:
psql -l -U postgres

Výstupem tohoto příkazu je tabulka názvů databází, vlastníků a přístupových práv. Data z prvního sloupce použijeme při popisu názvů databází pro budoucí příkazy. Pro tento článek použijeme databázi s názvem „název_databáze “.

Pokud potřebujete pouze názvy databází a žádné další informace, můžete přebytečné informace odstranit provedením přesného dotazu na názvy databází:
psql -U postgres -tA -c 'select datname from pg_database;'

Tento příkaz provede příkaz (popsaný pomocí -c flag) výběru datového názvu sloupec pg_database globální tabulka. -t flag uvádí pouze n-tice (řádky výsledků) a skryje přebytečné deskriptory, jako je záhlaví a počet výsledků a -A flag odstraní zarovnání, tiskne jednu databázi na řádek bez znaků před nebo za jmény. Výstup tohoto příkazu je zvláště užitečný pro vytváření smyček pro výpisy databází.

Vypsat databázi

Příkaz dump vezme úplnou kopii databáze, včetně všech tabulek, schémat a dat, a uloží ji do jediného komprimovaného souboru:
pg_dump -c -Fc -U postgres database_name > database_name.psql

Pro tento příkaz existuje několik důležitých příznaků. -c nebo –vyčistit , říká pg_dump pro přidání příkazů DROP do výstupu a -Fc nebo –format=custom , komprimuje a organizuje výstup pro použití s ​​pg_restore později. Vlastní formát má největší flexibilitu a výhodně také ukládá zálohu do jednoho souboru.

Vypsat všechny databáze

Pravděpodobně by bylo lepší uvést každou z databází do vlastního souboru opakovaným spuštěním výše uvedeného příkazu. Budeme odkazovat na náš druhý příkaz výpisu, který odstraní několik nepotřebných databází, abychom vytvořili naše jednotlivé výpisy.
for db in $(psql -U postgres -tA -c 'select datname from pg_database;' | grep -E -v “^(template1|template0|postgres)$”); do
echo $db
pg_dump -c -Fc -U postgres $db > $db.psql
done

Tato smyčka for předá seznam všech databází, kromě výchozích šablon a postgres databáze, do pg_dump příkaz k vytvoření .psql soubor pro každý z nich v aktuálním adresáři.

Poznámka:Je také možné provést výpis všech databází do jednoho souboru, i když u velkých souborů dat to může být nepraktické a obtížně se obnovuje. Proto tuto metodu nedoporučuji, i když je méně složitá a v některých situacích může fungovat.

pg_dumpall --clean -U postgres > pg.all.psql

Výpis grantů

Granty jsou uloženy ve schématu PostgreSQL. Schéma můžete vypsat a získat tak všechna dostupná povolení pro systém pomocí příkazu pg_dump:
pg_dumpall -U postgres -s > pg.schema.psql

Tím se vypíší nejen granty, ale také zbytek schématu serveru, včetně příkazů pro vytvoření databáze a tabulek, vlastnictví a členství v rolích a alokace ACL – v podstatě vše kromě dat.

Pokud potřebujete pouze uživatele (role) a granty, můžete je shromáždit pomocí tohoto příkazu:
pg_dumpall -U postgres -s | egrep -e '^(REVOKE|GRANT)' -e '^(CREATE|ALTER)\ ROLE' > pg.grants.psql

To využívá úplný výpis schémat, ale ke sestavení uživatelů a udělení se použijí pouze příkazy k vytvoření role a příkazy udělení/zrušení.

Odstranění nebo vypuštění databáze

Chcete-li zničit databázi, syntaxe je velmi přímočará. Při zadávání tohoto příkazu buďte opatrní, protože vás nežádá o potvrzení!
psql -U postgres -c ‘drop database database_name’

Pokud databáze existuje, již nebude. Pro stejnou úlohu existuje také obálka příkazového řádku:
dropdb -U postgres database_name

Smazat grant

Granty jsou uživatelům odebrány jejich odvoláním. Nejprve je důležité vědět, jaká oprávnění má konkrétní uživatel, takže je pojďme hledat vyprázdněním schématu a nalezením řádků souvisejících s naším uživatelem.
pg_dumpall -U postgres -s | egrep -e '^(REVOKE|GRANT)' | grep database_user

V mém případě existuje grant, který vypadá takto:
GRANT ALL ON DATABASE database_name TO database_user;

Abychom tomu zabránili, zrušíme stejný deskriptor:
psql -U postgres -c ‘revoke all on database database_name from database_user;’

Poznámka:Všimněte si drobných změn, GRANT byl změněn na REVOKE a TO bylo změněno na FROM. Tento příkaz je zabalen do jednoduchých uvozovek a předán do psql s parametrem -c pro provedení příkazu v PostgreSQL.
To nahradí původní příkaz GRANT ve schématu REVOKE. Opětovné spuštění prvního příkazu v této sekci nyní zobrazí pouze řádek, který jsme právě předali:
REVOKE ALL ON DATABASE database_name FROM database_user;

Obnovení databáze

U databází, které byly vypsány pomocí metody pg_dump použité v tomto článku, můžeme obnovit celou tuto databázi pomocí tohoto příkazu:
pg_restore -U postgres -c -C -O -d database_name database_name.psql

Tady je potřeba ještě pár vlajek! -c nebo –vyčistit , jako dříve, zahodí databázové objekty před zápisem ze souboru do PostgreSQL. Přidáme to jen v případě, že to nebylo použito pro příkaz dump. -C , nebo –vytvořit , vytvoří databázi název_databáze během obnovy, pokud neexistuje. Pokud databáze již existuje, -c flag jej zničí před -C znovu to vytvoří. Dále je -O nebo –bez vlastníka , která odstraní vlastníka z databáze. To umožňuje, aby se záloha z jakéhokoli zdroje změnila na vlastníka uživatele, který provádí obnovu, což je v našem případě postgres. -d název_databáze popisuje název databáze, do které budete obnovovat. V případě potřeby to může být jiný název, než ze kterého byla záloha vytvořena. Posledním argumentem je název našeho záložního souboru, název_databáze.psql .

Obnovit grant

Protože všechny granty jsou uloženy v našem souboru pg.grants.psql, musíme vybrat pouze uživatele, kterého potřebujeme obnovit. V našem případě obnovíme database_user:
grep database_user pg.grants.psql | psql -U postgres

Protože soubor pg.grants.psql má role a udělení, tento příkaz znovu vytvoří uživatele s jeho původními oprávněními a heslem a poté mu udělí přístup k požadovaným databázím a schématům.


  1. Jak rozdělit řetězec názvu v mysql?

  2. Funkce WIDTH_BUCKET() v Oracle

  3. Jak otevřít databázi v exkluzivním režimu v Accessu 2016

  4. Výkon MySQL – 5 parametrů z konfiguračního souboru