Perintah asas PostgreSQL. Arahan dan skrip Postgres Lihat data daripada postgresql dalam penyemak imbas

15 Perintah PostgreSQL yang Berguna

Terdapat banyak tutorial PostgreSQL di web yang menerangkan arahan asas. Tetapi apabila menyelam lebih dalam ke dalam kerja, isu praktikal timbul yang memerlukan pasukan maju.

Perintah, atau coretan sedemikian, jarang diterangkan dalam dokumentasi. Mari lihat beberapa contoh yang berguna untuk pembangun dan pentadbir pangkalan data.

Mendapatkan maklumat tentang pangkalan data

Saiz pangkalan data

Untuk mendapatkan saiz fizikal fail pangkalan data (storan), kami menggunakan pertanyaan berikut:

PILIH pg_database_size(current_database());

Keputusan akan dibentangkan sebagai nombor dalam borang 41809016.

current_database() ialah fungsi yang mengembalikan nama pangkalan data semasa. Sebaliknya, anda boleh memasukkan nama dalam teks:

PILIH pg_database_size("my_database");

Untuk mendapatkan maklumat dalam bentuk yang boleh dibaca manusia, kami menggunakan fungsi pg_size_pretty:

PILIH pg_size_pretty(pg_database_size(current_database()));

Hasilnya, kami memperoleh maklumat borang 40 Mb.

Senarai jadual

Kadangkala anda perlu mendapatkan senarai jadual pangkalan data. Untuk melakukan ini, kami menggunakan pertanyaan berikut:

PILIH nama_jadual DARI information_schema.tables DI MANA table_schema NOT IN ("information_schema","pg_catalog");

information_schema ialah skema pangkalan data standard yang mengandungi koleksi pandangan seperti jadual, medan, dsb. Paparan jadual mengandungi maklumat tentang semua jadual dalam pangkalan data.

Pertanyaan di bawah akan memilih semua jadual daripada skema pangkalan data semasa yang ditentukan:

PILIH nama_jadual DARI information_schema.tables DI MANA table_schema NOT IN ("information_schema", "pg_catalog") DAN table_schema IN("public", "myschema");

Keadaan IN terakhir boleh digunakan untuk menentukan nama skema tertentu.

Saiz meja

Sama seperti mendapatkan saiz pangkalan data, saiz data jadual boleh dikira menggunakan fungsi yang sepadan:

PILIH pg_relation_size("akaun");

Fungsi pg_relation_size mengembalikan jumlah ruang cakera yang diduduki oleh lapisan tertentu bagi jadual atau indeks tertentu pada cakera.

Nama jadual terbesar

Untuk memaparkan senarai jadual dalam pangkalan data semasa, diisih mengikut saiz jadual, jalankan pertanyaan berikut:

PILIH relname, relpages DARI pg_class ORDER BY relpages DESC;

Untuk memaparkan maklumat tentang jadual terbesar, kami mengehadkan pertanyaan menggunakan LIMIT:

PILIH relname, relpages DARI pg_class ORDER BY relpages DESC LIMIT 1;

relname - nama jadual, indeks, paparan, dsb.
relpages - saiz perwakilan cakera jadual ini dalam bilangan halaman (secara lalai, satu halaman ialah 8 KB).
pg_class ialah jadual sistem yang mengandungi maklumat tentang hubungan antara jadual pangkalan data.

Senarai pengguna yang disambungkan

Untuk mengetahui nama, IP dan port terpakai pengguna yang disambungkan, jalankan pertanyaan berikut:

PILIH datname, usename, client_addr, client_port FROM pg_stat_activity;

Aktiviti pengguna

Untuk mengetahui aktiviti sambungan pengguna tertentu, gunakan pertanyaan berikut:

PILIH nama data DARI pg_stat_activity WHERE usename = "devuser";

Bekerja dengan data dan medan jadual

Mengalih keluar baris pendua

Sekiranya berlaku bahawa jadual tidak mempunyai kunci utama, maka mungkin terdapat pendua antara rekod. Jika untuk jadual sedemikian, terutamanya yang besar, perlu menetapkan kekangan untuk memeriksa integriti, kemudian alih keluar elemen berikut:

  • baris pendua,
  • situasi di mana satu atau lebih lajur diduakan (jika lajur ini bertujuan untuk digunakan sebagai kunci utama).

Mari kita pertimbangkan jadual dengan data pelanggan, di mana seluruh baris (yang kedua) diduplikasi.

Pertanyaan berikut akan membantu anda mengalih keluar semua pendua:

PADAM DARIPADA pelanggan DI MANA ctid TIDAK MASUK (PILIH maks(ctid) DARI pelanggan KUMPULAN OLEH pelanggan.*);

Medan ctid, unik untuk setiap rekod, disembunyikan secara lalai, tetapi ia terdapat dalam setiap jadual.

Permintaan terakhir adalah intensif sumber, jadi berhati-hati apabila melaksanakannya pada projek pengeluaran.

Sekarang pertimbangkan kes apabila nilai medan diulang.

Jika dibenarkan untuk memadamkan pendua tanpa menyimpan semua data, kami akan melaksanakan permintaan berikut:

PADAM DARIPADA pelanggan DI MANA ctid TIDAK DALAM (PILIH maks(ctid) DARIPADA pelanggan KUMPULAN OLEH customer_id);

Jika data itu penting, maka anda perlu mencari rekod dengan pendua terlebih dahulu:

PILIH * DARI pelanggan DI MANA ctid TIDAK DI DALAM (PILIH maks(ctid) DARI pelanggan KUMPULAN OLEH customer_id);

Sebelum memadam, rekod tersebut boleh dialihkan ke jadual sementara atau nilai customer_id di dalamnya boleh digantikan dengan yang lain.

Bentuk umum permintaan untuk memadam rekod yang diterangkan di atas adalah seperti berikut:

PADAM DARI table_name DI MANA ctid NOT IN (PILIH max(ctid) DARI table_name KUMPULAN MENGIKUT lajur1, );

Menukar jenis medan dengan selamat

Mungkin terdapat soalan tentang memasukkan tugasan sedemikian dalam senarai ini. Lagipun, dalam PostgreSQL sangat mudah untuk menukar jenis medan menggunakan arahan ALTER. Mari kita lihat jadual pelanggan sekali lagi sebagai contoh.

Medan customer_id menggunakan jenis data rentetan varchar. Ini adalah ralat kerana medan ini sepatutnya menyimpan ID pelanggan, yang dalam format integer. Menggunakan varchar tidak wajar. Mari cuba betulkan salah faham ini menggunakan arahan ALTER:

ALTER TABLE pelanggan ALTER COLUMN customer_id TYPE integer;

Tetapi sebagai hasil daripada pelaksanaan kami mendapat ralat:

RALAT: lajur “customer_id” tidak boleh dihantar secara automatik untuk menaip integer
Keadaan SQL: 42804
Petunjuk: Tentukan ungkapan USING untuk melakukan penukaran.

Ini bermakna anda tidak boleh menukar jenis medan jika terdapat data dalam jadual. Oleh kerana jenis varchar telah digunakan, DBMS tidak dapat menentukan sama ada nilai itu adalah integer. Walaupun data sepadan dengan jenis ini. Untuk menjelaskan perkara ini, mesej ralat mencadangkan menggunakan ungkapan USING untuk menukar data kami kepada integer dengan betul:

ALTER TABLE pelanggan ALTER COLUMN customer_id TYPE integer USING (customer_id::integer);

Akibatnya, semuanya berjalan tanpa kesilapan:

Sila ambil perhatian bahawa apabila menggunakan USING, sebagai tambahan kepada ungkapan tertentu, adalah mungkin untuk menggunakan fungsi, medan dan pengendali lain.

Sebagai contoh, mari tukar medan customer_id kembali kepada varchar , tetapi dengan penukaran format data:

ALTER TABLE pelanggan ALTER COLUMN customer_id TYPE varchar USING (customer_id || "-" || first_name);

Akibatnya, jadual akan kelihatan seperti ini:

Mencari nilai "hilang".

Berhati-hati apabila menggunakan jujukan sebagai kunci utama: semasa tugasan, beberapa elemen jujukan secara tidak sengaja dilangkau, dan akibat bekerja dengan jadual, beberapa rekod dipadamkan. Nilai sedemikian boleh digunakan semula, tetapi ia sukar dicari dalam jadual besar.

Mari kita pertimbangkan dua pilihan carian.

Cara pertama
Mari jalankan pertanyaan berikut untuk mencari permulaan selang dengan nilai "hilang":

PILIH id_pelanggan + 1 DARI pelanggan mo WHERE NOT EXISTS (PILIH NULL DARI pelanggan mi WHERE mi.customer_id = mo.customer_id + 1) PESANAN OLEH customer_id;

Hasilnya, kami mendapat nilai berikut: 5, 9 dan 11.

Jika anda perlu mencari bukan sahaja kejadian pertama, tetapi semua nilai yang hilang, kami menggunakan pertanyaan berikut (intensif sumber!):

DENGAN seq_maks AS (PILIH maks(id_pelanggan) DARIPADA pelanggan), seq_min AS (PILIH min(id_pelanggan) DARI pelanggan) PILIH * DARI generate_series((PILIH min DARI seq_min),(PILIH maks DARI seq_maks)) KECUALI PILIH customer_id DARIPADA pelanggan;

Hasilnya, kita melihat hasil berikut: 5, 9 dan 6.

Cara kedua
Kami mendapat nama urutan yang dikaitkan dengan customer_id:

PILIH pg_get_serial_sequence("customer", "customer_id");

Dan kami dapati semua pengecam yang hilang:

DENGAN sequence_info AS (SELECT start_value, last_value FROM "SchemaName"."SequenceName") PILIH generate_series ((sequence_info.start_value), (sequence_info.last_value)) DARI sequence_info KECUALI PILIH customer_id DARIPADA pelanggan;

Mengira bilangan baris dalam jadual

Bilangan baris dikira oleh fungsi kiraan standard, tetapi ia boleh digunakan dengan syarat tambahan.

Jumlah bilangan baris dalam jadual:

PILIH kiraan(*) DARI jadual;

Bilangan baris dengan syarat medan yang ditentukan tidak mengandungi NULL:

PILIH kiraan(col_name) DARI jadual;

Bilangan baris unik untuk medan yang ditentukan:

SELECT count(distinct col_name) DARI jadual;

Menggunakan urus niaga

Transaksi menggabungkan urutan tindakan ke dalam satu operasi. Keistimewaannya ialah jika terdapat ralat dalam melaksanakan transaksi, tiada hasil tindakan akan disimpan dalam pangkalan data.

Mari mulakan transaksi menggunakan arahan BEGIN.

Untuk melancarkan semula semua operasi yang terletak selepas BEGIN, gunakan arahan ROLLBACK.

Dan untuk menerapkannya - arahan COMMIT.

Lihat dan tamatkan pertanyaan yang sedang dijalankan

Untuk mendapatkan maklumat tentang permintaan, jalankan arahan berikut:

PILIH pid, umur(query_start, clock_timestamp()), usename, query FROM pg_stat_activity WHERE query != " " DAN pertanyaan TIDAK SUKA "%pg_stat_activity%" ORDER OLEH query_start desc;

Untuk menghentikan permintaan tertentu, jalankan arahan berikut, menunjukkan id proses (pid):

PILIH pg_cancel_backend(procpid);

Untuk menghentikan permintaan, jalankan:

PILIH pg_terminate_backend(procpid);

Bekerja dengan konfigurasi

Mencari dan menukar lokasi kejadian kluster

Situasi mungkin berlaku apabila beberapa kejadian PostgreSQL dikonfigurasikan pada satu sistem pengendalian, yang "duduk" pada port yang berbeza. Dalam kes ini, mencari cara untuk meletakkan setiap contoh secara fizikal adalah tugas yang agak membingungkan. Untuk mendapatkan maklumat ini, jalankan pertanyaan berikut untuk mana-mana pangkalan data dalam kelompok minat:

TUNJUKKAN direktori_data;

Mari tukar lokasi kepada yang lain menggunakan arahan:

SET data_direktori kepada new_directory_path;

Tetapi untuk perubahan berkuat kuasa, but semula diperlukan.

Mendapatkan senarai jenis data yang tersedia

Kami mendapat senarai jenis data yang tersedia menggunakan arahan:

PILIH nama taip, taip daripada pg_type di mana typtype="b";

typname - nama jenis data.
typelen - saiz jenis data.

Menukar tetapan DBMS tanpa but semula

Tetapan PostgreSQL terletak dalam fail khas seperti postgresql.conf dan pg_hba.conf. Selepas menukar fail ini, DBMS perlu menerima tetapan semula. Untuk melakukan ini, pelayan pangkalan data dibut semula. Sudah jelas bahawa anda perlu melakukan ini, tetapi pada versi pengeluaran projek, yang digunakan oleh beribu-ribu pengguna, ini sangat tidak diingini. Oleh itu, PostgreSQL mempunyai fungsi yang membolehkan anda menggunakan perubahan tanpa but semula pelayan:

PILIH pg_reload_conf();

Tetapi, malangnya, ia tidak terpakai kepada semua parameter. Dalam sesetengah kes, but semula diperlukan untuk tetapan digunakan.

Kami melihat arahan yang akan membantu memudahkan kerja pembangun dan pentadbir pangkalan data menggunakan PostgreSQL. Tetapi ini bukan semua kaedah yang mungkin. Sekiranya anda menghadapi tugas yang menarik, tulis tentangnya dalam ulasan. Jom kongsi pengalaman berguna!

Dalam artikel ini saya akan menunjukkan kepada anda 15 arahan yang paling berguna untuk mengurus postgreSQL.

1. Bagaimana untuk menukar kata laluan root dalam PostgreSQL?

$ /usr/local/pgsql/bin/psql postgres postgres Kata laluan: (kata laluan lama) # UBAH postgres PENGGUNA DENGAN KATA LALUAN 'tmppassword'; $ /usr/local/pgsql/bin/psql postgres postgres Kata laluan: (tmppassword)

Menukar kata laluan untuk pengguna biasa berlaku dengan cara yang sama. Pengguna root boleh menukar kata laluan untuk mana-mana pengguna.

# UBAH nama pengguna PENGGUNA DENGAN KATA LALUAN 'tmppassword';

2. Bagaimana untuk memasang PostgreSQL ke dalam 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. Semak status pelayan

$ /etc/init.d/postgresql status Kata laluan: pg_ctl: pelayan sedang berjalan (PID: 6171) /usr/local/pgsql/bin/postgres “-D” “/usr/local/pgsql/data” [ Komen: Mesej ini menunjukkan bahawa pelayan sedang berjalan dan berfungsi seperti biasa] $ /etc/init.d/postgresql status Kata laluan: pg_ctl: tiada pelayan berjalan [ Komen: Mesej ini menunjukkan bahawa pelayan tidak berjalan]

4. Bagaimana untuk memulakan, menghentikan, memulakan semula PostgreSQL?

# perkhidmatan postgresql berhenti Menghentikan PostgreSQL: pelayan berhenti ok # perkhidmatan postgresql bermula Memulakan PostgreSQL: ok # perkhidmatan postgresql dimulakan semula Memulakan semula PostgreSQL: pelayan berhenti ok

5. Bagaimanakah saya boleh melihat versi PostgreSQL yang sedang dijalankan?

$ /usr/local/pgsql/bin/ujian psql Selamat datang ke psql 8.3.7, terminal interaktif PostgreSQL. Jenis: \hak cipta untuk istilah pengedaran \h untuk bantuan dengan arahan SQL \? untuk mendapatkan bantuan dengan arahan psql \g atau tamatkan dengan titik koma untuk melaksanakan pertanyaan \q untuk berhenti ujian=# pilih versi(); versi —————————————————————————————————— PostgreSQL 8.3.7 pada i686-pc-linux-gnu, disusun oleh GCC gcc (GCC) 4.1.2 20071124 (Red Hat 4.1.2-42) (1 baris) ujian=#

5. Bagaimana untuk mencipta pengguna dalam PostgreSQL?

Terdapat dua kaedah untuk ini..

Kaedah 1: Kami mencipta pengguna menggunakan shell PSQL menggunakan arahan CREATE USER.

# BUAT ramesh PENGGUNA DENGAN kata laluan 'tmppassword'; CIPTA PERANAN

Kaedah2: Kami mencipta pengguna menggunakan arahan shell createuser.

$ /usr/local/pgsql/bin/createuser sathiya Adakah peranan baharu itu akan menjadi pengguna super? (y/n) n Adakah peranan baharu dibenarkan untuk mencipta pangkalan data? (y/n) n Adakah peranan baharu itu dibenarkan untuk mencipta lebih banyak peranan baharu? (y/n) n CIPTA PERANAN

6. Bagaimana untuk mencipta pangkalan data dalam PostgreSQL?

Terdapat 2 kaedah untuk ini.

Kaedah1: Kami mencipta pangkalan data melalui cangkerang PSQL menggunakan arahan CREATE DATABASE.

# BUAT PANGKALAN DATA mydb DENGAN PEMILIK ramesh; BUAT PANGKALAN DATA

Kaedah2: Kami menggunakan arahan createb.

$ /usr/local/pgsql/bin/createdb mydb -O ramesh BUAT PANGKALAN DATA

7. Adakah kita mendapat senarai semua pangkalan data dalam Postgresql?

# \l Senarai pangkalan data Nama | Pemilik | Pengekodan ———-+———-+———- sandaran | postgres | UTF8 mydb | ramesh | postgres UTF8 | postgres | Templat UTF80 | postgres | Templat UTF81 | postgres | UTF8

8. Bagaimana untuk memadam pangkalan data dalam PostgreSQL?

# \l Senarai pangkalan data Nama | Pemilik | Pengekodan ———-+———-+———- sandaran | postgres | UTF8 mydb | ramesh | postgres UTF8 | postgres | Templat UTF80 | postgres | Templat UTF81 | postgres | UTF8# DROP DATABASE mydb; DROP DATABASE

9. Gunakan bantuan terbina dalam untuk arahan

Pasukan \? akan memaparkan baris bantuan untuk arahan PSQL. \h CREATE akan menunjukkan bantuan untuk semua arahan yang bermula dengan CREATE.

# \? # \h CIPTA # \h CIPTA INDEKS

10. Bagaimana untuk mendapatkan senarai semua jadual dalam pangkalan data yang diberikan dalam Postgresql?

# \d

Untuk pangkalan data kosong, anda akan menerima mesej "Tiada hubungan ditemui."

11. Bagaimanakah saya boleh mengetahui masa pelaksanaan permintaan?

# \timing - selepas melaksanakan arahan ini, setiap permintaan seterusnya akan menunjukkan masa pelaksanaan.

# \masa Masa dihidupkan. # PILIH * daripada pg_catalog.pg_attribute ; Masa: 9.583 ms

12. Bagaimana untuk membuat sandaran dan memulihkan pangkalan data dan jadual dalam PostgreSQL?

Soalan ini agak besar dan saya akan menerbitkannya kemudian dalam artikel berasingan.

13. Bagaimana untuk melihat senarai fungsi yang tersedia dalam PostgreSQL?

Untuk mendapatkan senarai fungsi yang tersedia, sebut \df+

# \df # \df+

14. Bagaimana untuk mengedit pertanyaan PostgreSQL dalam editor?

# \e

\e akan membuka editor di mana anda boleh mengedit pertanyaan dan menyimpannya.

15. Di manakah saya boleh mencari fail sejarah postgreSQL?

Sama seperti fail ~/.bash_history, postgreSQL menyimpan semua arahan sql dalam fail ~/.psql_history.

$ kucing ~/.psql_history ubah postgres pengguna dengan kata laluan 'tmppassword'; \h ubah pengguna pilih versi(); buat ramesh pengguna dengan kata laluan 'tmppassword'; \masa pilih * daripada pg_catalog.pg_attribute;

Hello semua, hari ini saya ingin membuat peringatan ringkas tentang arahan asas PostgreSQL. Anda boleh bekerja dengan PosgreSQL secara interaktif dan dari baris arahan. Program ini ialah psql. Saya pasti bahawa senarai ini akan sangat berguna kepada anda dan akan menjimatkan masa anda mencari melalui sumber yang berbeza. Biar saya ingatkan anda bahawa ini adalah projek sumber terbuka, berdasarkan DBMS Postgres, dikeluarkan pada tahun 1986, ia sedang dibangunkan oleh sekumpulan pembangun PGDG di seluruh dunia, pada asasnya 5-8 orang, tetapi walaupun demikian, ia sedang membangun dengan sangat intensif , memperkenalkan fungsi baharu dan membetulkan pepijat dan ralat lama.

Perintah asas PostgreSQL dalam mod interaktif:

  • \connect db_name – sambung ke pangkalan data bernama db_name
  • \du – senarai pengguna
  • \dp (atau \z) – senarai jadual, paparan, jujukan, hak akses kepada mereka
  • \di – indeks
  • \ds – urutan
  • \dt – senarai jadual
  • \dt+ - senarai semua jadual dengan penerangan
  • \dt *s* - senarai semua jadual yang mengandungi s dalam nama
  • \dv – perwakilan
  • \dS – jadual sistem
  • \d+ – penerangan jadual
  • \o – hantar hasil pertanyaan ke fail
  • \l – senarai pangkalan data
  • \i – membaca data masuk daripada fail
  • \e – membuka kandungan semasa penimbal permintaan dalam editor (melainkan dinyatakan sebaliknya dalam persekitaran pembolehubah EDITOR, vi akan digunakan secara lalai)
  • \d “table_name” – perihalan jadual
  • \i menjalankan arahan daripada fail luaran, contohnya \i /my/directory/my.sql
  • \pset – arahan untuk mengkonfigurasi pilihan pemformatan
  • \echo – memaparkan mesej
  • \set – Menetapkan nilai pembolehubah persekitaran. Tanpa parameter, memaparkan senarai pembolehubah semasa (\unset – deletes).
  • \? – rujukan psql
  • \help – Rujukan SQL
  • \q (atau Ctrl+D) – keluar dari program

Bekerja dengan PostgreSQL dari baris arahan:

  • -c (atau –command) – jalankan arahan SQL tanpa masuk ke mod interaktif
  • -f file.sql - laksanakan arahan daripada fail file.sql
  • -l (atau –senarai) – memaparkan senarai pangkalan data yang tersedia
  • -U (atau –nama pengguna) – nyatakan nama pengguna (contohnya postgres)
  • -W (atau –kata laluan) – gesaan kata laluan
  • -d dbname - sambung ke pangkalan data dbname
  • -h – nama hos (pelayan)
  • -s – mod langkah demi langkah, iaitu, anda perlu mengesahkan semua arahan
  • –S – mod baris tunggal, iaitu, pergi ke baris baharu akan melaksanakan pertanyaan (menyingkirkan; pada akhir binaan SQL)
  • -V – versi PostgreSQL tanpa memasuki mod interaktif

Contoh:

psql -U postgres -d dbname -c “CREATE TABLE my(some_id serial KEY PRIMARY, some_text text);” - pelaksanaan arahan dalam pangkalan data dbname.

psql -d dbname -H -c “SELECT * FROM my” -o my.html - keluarkan hasil pertanyaan kepada fail html.

Utiliti PosgreSQL (program):

  • createdb dan dropdb - buat dan lepaskan pangkalan data (masing-masing)
  • createuser dan dropuser - penciptaan dan pengguna (masing-masing)
  • pg_ctl – program yang direka untuk menyelesaikan tugas kawalan am (memulakan, menghentikan, menetapkan parameter, dll.)
  • postmaster – modul pelayan PostgreSQL berbilang pengguna (mengkonfigurasi tahap nyahpepijat, port, direktori data)
  • initdb – mencipta kluster PostgreSQL baharu
  • initlocation – program untuk mencipta direktori untuk penyimpanan pangkalan data sekunder
  • vacuumdb – sokongan pangkalan data fizikal dan analitikal
  • pg_dump – mengarkib dan memulihkan data
  • pg_dumpall – sandarkan keseluruhan kluster PostgreSQL
  • pg_restore – pemulihan pangkalan data daripada arkib (.tar, .tar.gz)

Contoh membuat sandaran:

Mencipta sandaran pangkalan data mydb, dalam bentuk termampat

Pg_dump -h localhost -p 5440 -U someuser -F c -b -v -f mydb.backup mydb

Mencipta sandaran pangkalan data mydb, dalam bentuk fail teks biasa, termasuk arahan untuk mencipta pangkalan data

Pg_dump -h localhost -p 5432 -U someuser -C -F p -b -v -f mydb.backup mydb

Mencipta sandaran pangkalan data mydb, dalam bentuk termampat, dengan jadual yang mengandungi pembayaran dalam nama

Pg_dump -h localhost -p 5432 -U someuser -F c -b -v -t *payments* -f payment_tables.backup mydb

Buang data daripada hanya satu jadual tertentu. Jika berbilang jadual perlu disandarkan, nama jadual disenaraikan menggunakan suis -t untuk setiap jadual.

Pg_dump -a -t table_name -f file_name database_name

Mencipta sandaran dengan pemampatan gz

Pg_dump -h localhost -O -F p -c -U postgres mydb | gzip -c > mydb.gz

Senarai pilihan yang paling biasa digunakan:

  • -h hos - hos, jika tidak dinyatakan maka localhost atau nilai daripada pembolehubah persekitaran PGHOST digunakan.
  • -p port - port; jika tidak dinyatakan, 5432 atau nilai daripada pembolehubah persekitaran PGPORT digunakan.
  • -u - pengguna, jika tidak dinyatakan, pengguna semasa digunakan, nilai juga boleh ditentukan dalam pembolehubah persekitaran PGUSER.
  • -a, -data-only - hanya membuang data secara lalai, data dan skema disimpan.
  • -b - masukkan objek besar (blog) di tempat pembuangan.
  • -s, -schema-only - buang skema sahaja.
  • -C, -create - menambah arahan untuk mencipta pangkalan data.
  • -c - menambah arahan untuk memadam (menggugurkan) objek (jadual, pandangan, dll.).
  • -O - ​​​​jangan tambah arahan untuk menetapkan pemilik objek (jadual, pandangan, dll.).
  • -F, -format (c|t|p) - format output buang, tersuai, tar atau teks biasa.
  • -t, -table=TABLE - tentukan jadual khusus untuk tempat pembuangan.
  • -v, -verbose - mengeluarkan maklumat terperinci.
  • -D, -attribute-inserts - buang menggunakan arahan INSERT dengan senarai nama harta.

Sandarkan semua pangkalan data menggunakan perintah pg_dumpall.

Pg_dumpall > all.sql

Memulihkan jadual daripada sandaran:

psql - memulihkan sandaran yang disimpan dalam fail teks biasa;
pg_restore - memulihkan sandaran termampat (tar);

Memulihkan keseluruhan sandaran sambil mengabaikan ralat

Psql -h localhost -U someuser -d dbname -f mydb.sql

Memulihkan keseluruhan sandaran, berhenti pada ralat pertama

Psql -h localhost -U someuser -set ON_ERROR_STOP=on -f mydb.sql

Untuk memulihkan daripada arkib tar, pertama sekali kita perlu mencipta pangkalan data menggunakan CREATE DATABASE mydb; (jika pilihan -C tidak dinyatakan semasa membuat sandaran) dan pulihkan

Pg_restore -dbname=mydb -jobs=4 -verbose mydb.backup

Memulihkan sandaran pangkalan data termampat gz

psql -U postgres -d mydb -f mydb

Saya rasa pangkalan data postgresql kini akan lebih mudah difahami oleh anda. Saya harap senarai arahan PostgreSQL ini berguna kepada anda.

Kemas kini terakhir: 17/03/2018

Untuk mencipta jadual, gunakan arahan CREATE TABLE, diikuti dengan nama jadual. Anda juga boleh menggunakan beberapa operator dengan arahan ini yang mentakrifkan lajur jadual dan atributnya. Sintaks umum untuk membuat jadual adalah seperti berikut:

BUAT JADUAL nama_jadual (nama_lajur1 jenis data_lajur_atribut1, lajur_nama2 data_jenis_lajur_atribut2, ..................................... . ......... column_nameN data_type column_attributesN, table_attributes);

Selepas nama jadual, spesifikasi untuk semua lajur disenaraikan dalam kurungan. Selain itu, untuk setiap lajur anda mesti menunjukkan nama dan jenis data yang akan diwakilinya. Jenis data menentukan data (nombor, rentetan, dll.) yang boleh terkandung dalam lajur.

Sebagai contoh, mari kita buat jadual dalam pangkalan data menggunakan pgAdmin. Untuk melakukan ini, mula-mula pilih pangkalan data sasaran dalam pgAdmin, klik kanan padanya dan pilih Alat Pertanyaan... dalam menu konteks:

Selepas ini, medan untuk memasukkan kod SQL akan dibuka. Selain itu, jadual akan dibuat khusus untuk pangkalan data yang mana kami membuka medan input SQL ini.

CIPTA pelanggan JADUAL (Id SIRI KUNCI UTAMA, Nama Pertama WATAK BERUBAH(30), Nama Akhir PERWATAKAN BERUBAH(30), E-mel WATAK BERUBAH(30), INTEGER Umur);

Dalam kes ini, lima lajur ditakrifkan dalam jadual Pelanggan: Id, Nama Pertama, Nama Akhir, Umur, E-mel. Lajur pertama, Id, mewakili ID klien, ia berfungsi sebagai kunci utama dan oleh itu jenis SERIAL. Malah, lajur ini akan menyimpan nilai angka 1, 2, 3, dsb., yang akan meningkat secara automatik sebanyak satu untuk setiap baris baharu.

Tiga lajur seterusnya mewakili nama pertama pelanggan, nama keluarga dan alamat e-mel dan jenis CHARACTER VARYING(30) , bermakna ia adalah rentetan tidak lebih daripada 30 aksara.

Lajur terakhir, Umur, mewakili umur pengguna dan jenis INTEGER, bermakna ia menyimpan nombor.

Dan selepas melaksanakan arahan ini, jadual pelanggan akan ditambah ke pangkalan data yang dipilih.

Mengalih keluar jadual

Untuk menggugurkan jadual, gunakan perintah DROP TABLE, yang mempunyai sintaks berikut:

GUGURKAN JADUAL jadual1 [, jadual2, ...];

Contohnya, memadam jadual pelanggan.

Alternatif untuk bekerja dengan pangkalan data melalui konsol ialah persekitaran yang lebih intuitif bagi mana-mana klien GUI. Sebagai contoh, pgAdmin. Memasangnya sangat mudah, kami melaksanakannya dengan hak superuser:

sudo apt-get install pgadmin3
Sekarang anda boleh berlari pgAdmin melalui antara muka grafik. Kami memilih pelayan pangkalan data tempatan daripada senarai (ia mempunyai port lalai 5432) dan menambah pangkalan data yang telah kami buat dengan parameter yang telah kami tetapkan.
pgAdmin

Dalam pelayan tempatan ini sebagai tambahan kepada nod Pangkalan data anda juga boleh mencari nod yang dipanggil Peranan Log Masuk- semua peranan yang ada.

Daripada semua pangkalan data yang tersedia, mari pilih pangkalan data yang kami buat dengan . Pangkalan data mengandungi pelbagai jenis objek. Antaranya, perhatian khusus harus diberikan kepada jadual dan urutan ( urutan).

Selalunya, jadual biasa mengandungi kunci utama dalam bentuk nilai angka positif. Untuk setiap baris, nilai ini mestilah unik, jadi untuk tidak menyatakannya secara langsung dalam permintaan setiap kali, anda boleh menetapkan jujukan sebagai nilai lalai.

Mula-mula, mari buat urutan. pilih Urutan - Urutan Baharu. Pada tab pertama, masukkan nama dan tentukan sebagai Pemilik peranan yang kita cipta. Urutan ini tidak akan tersedia untuk peranan lain. Pada tab kedua dalam medan Kenaikan Dan Mulakan masukkan satu demi satu (melainkan anda memerlukan sesuatu yang lain). Pada tab terakhir kotak dialog anda boleh melihat pertanyaan SQL yang terhasil yang akan dilaksanakan ke pangkalan data.

Selepas urutan dibuat, mari kita mula mencipta jadual. Kami juga menunjukkan nama dan pemiliknya. Pada tab keempat Lajur Pertama sekali, kami menambah kunci utama. Butang Tambah, dalam tetingkap yang muncul, nyatakan nama lajur, sebagai contoh, ID. Untuk jenis data kami pilih bigint. Pada tab kedua Definisi di padang Nilai asal Kami menunjukkan urutan kami. Medan mesti mengandungi nilai seperti nextval("message_id_seq"::regclass). Iaitu, setiap kali baris baharu ditambah, nilai seterusnya akan diambil daripada jujukan. Menambah lajur lain mengikut keperluan. Akhirnya, pada tab Kekangan tambahkan kekangan pada kunci utama ( Kunci utama). Pada tab terakhir kita boleh mengagumi kod SQL yang dihasilkan yang pgAdmin hasilkan. Selepas mengklik OK, jadual akan dibuat.

Daripada bigint sebagai kunci utama, anda boleh menentukannya sebagai jenis lajur bigserial. Jenis ini meningkat secara automatik apabila setiap baris baharu ditambahkan, jadi tidak perlu mencipta urutan untuknya. Iaitu, dalam kes paling mudah, jika anda tidak mempunyai sebarang peraturan khas untuk menjana id rekod, kami boleh mengesyorkan menggunakan bigserial.

Mari lihat kandungan jadual kami. Untuk melakukan ini, klik kanan padanya dan pilih dalam menu konteks Lihat Data - Lihat 100 baris.

Dalam tetingkap yang sama anda boleh mengedit nilai mana-mana sel jadual dengan cepat. Jika jadual anda mempunyai lebih daripada 100 rekod, tukar bilangan rekod yang dipaparkan dalam senarai juntai bawah di bahagian atas tetingkap. Anda boleh memaparkan 100, 500, 1000 atau semua entri. Tetapi ini tidak lebih daripada cara untuk melihat kandungan jadual dengan cepat dan anda tidak seharusnya membiasakannya. Jika anda mempunyai puluhan ribu rekod dalam jadual anda, saya tidak akan mengesyorkan untuk memaparkan semua rekod sekaligus - dalam kes ini adalah lebih baik untuk menulis pertanyaan menggunakan parameter had Dan mengimbangi.