Mengulas Lebih Jauh Tentang PostgreSQL

Mengulas Lebih Jauh Tentang PostgreSQL – PostgreSQL adalah sistem database relasional kelas perusahaan, dan open-source. PostgreSQL mendukung kueri SQL (relasional) dan JSON (non-relasional).

Mengulas Lebih Jauh Tentang PostgreSQL

pgsql – PostgreSQL adalah database yang sangat stabil yang didukung oleh lebih dari 20 tahun pengembangan oleh komunitas open-source.PostgreSQL digunakan sebagai database utama untuk banyak aplikasi web serta aplikasi seluler dan analitik.

Sejarah PostgreSQL

Proyek ini awalnya bernama POSTGRES, mengacu pada database Ingres lama yang juga dikembangkan di Berkeley. Tujuan dari proyek POSTGRES adalah untuk menambahkan fitur minimal yang diperlukan untuk mendukung beberapa tipe data.

Baca Juga : Perbadingan Sistem Manajemen Basis Data MongoDB dan PostgreSQL

Pada tahun 1996, proyek POSTGRES diubah namanya menjadi PostgreSQL untuk menggambarkan dengan jelas dukungannya terhadap SQL. Saat ini, PostgreSQL biasa disingkat Postgres.

Sejak itu, PostgreSQL Global Development Group, komunitas kontributor yang berdedikasi terus membuat rilis proyek basis data sumber terbuka dan gratis.

Awalnya, PostgreSQL dirancang untuk berjalan pada platform mirip UNIX. Dan kemudian, PostgreSQL dikembangkan dan dijalankan di berbagai platform seperti Windows, macOS, dan Solaris.

Kasus Penggunaan Umum PostgreSQL

 Basis data yang kuat di tumpukan LAPP

LAPP adalah singkatan dari L inux, A pache, P ostgreSQL, dan P HP (atau Python dan Perl). PostgreSQL terutama digunakan sebagai database back-end yang kuat yang mendukung banyak situs web dinamis dan aplikasi web.

 Basis data transaksi tujuan umum

Perusahaan besar dan startup sama-sama menggunakan PostgreSQL sebagai database utama untuk mendukung aplikasi dan produk mereka.

Basis data geospasial

PostgreSQL dengan ekstensi PostGIS mendukung database geospasial untuk sistem informasi geografis (GIS).

Fungsi Sistem Informasi

Biasanya adalah pengguna yang session_usermemulai koneksi database saat ini; tetapi pengguna super dapat mengubah pengaturan ini dengan SET SESSION AUTHORIZATION . Ini current_user adalah pengidentifikasi pengguna yang berlaku untuk pemeriksaan izin. Biasanya sama dengan pengguna sesi, tetapi dapat diubah dengan SET ROLE . Itu juga berubah selama eksekusi fungsi dengan atribut SECURITY DEFINER . Dalam bahasa Unix, pengguna sesi adalah “pengguna nyata” dan pengguna saat ini adalah “pengguna efektif”.

current_schemamengembalikan nama skema yang pertama di jalur pencarian (atau nilai nol jika jalur pencarian kosong). Ini adalah skema yang akan digunakan untuk setiap tabel atau objek bernama lainnya yang dibuat tanpa menentukan skema target. current_schemas(boolean)mengembalikan larik nama semua skema saat ini di jalur pencarian. Opsi Boolean menentukan apakah skema sistem yang disertakan secara implisit seperti pg_catalog disertakan dalam jalur pencarian yang dikembalikan atau tidak.

pg_listening_channelsmengembalikan sekumpulan nama saluran yang sedang didengarkan oleh sesi saat ini.

inet_client_addrmengembalikan alamat IP klien saat ini, dan inet_client_portmengembalikan nomor port. inet_server_addrmengembalikan alamat IP di mana server menerima koneksi saat ini, dan inet_server_portmengembalikan nomor port. Semua fungsi ini mengembalikan NULL jika koneksi saat ini melalui soket domain Unix.

pg_my_temp_schemamengembalikan OID dari skema sementara sesi saat ini, atau nol jika tidak ada (karena belum membuat tabel sementara). pg_is_other_temp_schemamengembalikan true jika OID yang diberikan adalah OID dari skema sementara sesi lain. (Ini bisa berguna, misalnya, untuk mengecualikan tabel sementara sesi lain dari tampilan katalog.)

pg_postmaster_start_timemengembalikan stempel waktu dengan zona waktu saat server dimulai.

pg_conf_load_timemengembalikan stempel waktu dengan zona waktu saat file konfigurasi server terakhir dimuat. (Jika sesi saat ini masih hidup pada saat itu, ini akan menjadi waktu ketika sesi itu sendiri membaca ulang file konfigurasi, sehingga pembacaan akan sedikit berbeda di sesi yang berbeda. Jika tidak, ini adalah waktu ketika proses postmaster membaca ulang file konfigurasi.versionmengembalikan string yang menjelaskan versi server PostgreSQL.

has_table_privilegememeriksa apakah pengguna dapat mengakses tabel dengan cara tertentu. Pengguna dapat ditentukan dengan nama atau OID ( pg_authid.oid ), atau jika argumen dihilangkan current_userdiasumsikan. Tabel dapat ditentukan berdasarkan nama atau OID. (Jadi, sebenarnya ada enam varian dari has_table_privilege, yang dapat dibedakan berdasarkan jumlah dan jenis argumennya.) Saat menentukan berdasarkan nama, nama dapat memenuhi syarat skema jika perlu. Jenis hak akses yang diinginkan ditentukan oleh string teks, yang harus dievaluasi ke salah satu nilai SELECT , INSERT , UPDATE , DELETE , TRUNCATE , REFERENCES , atau TRIGGER . Opsional,WITH GRANT OPTION dapat ditambahkan ke jenis hak istimewa untuk menguji apakah hak istimewa dipegang dengan opsi hibah. Juga, beberapa jenis hak istimewa dapat dicantumkan dipisahkan dengan koma, dalam hal ini hasilnya akan benar jika salah satu hak istimewa yang terdaftar dipegang. (Kasus string hak istimewa tidak signifikan, dan spasi ekstra diizinkan di antara tetapi tidak di dalam nama hak istimewa.) Beberapa contoh:
SELECT has_table_privilege(‘myschema.mytable’, ‘pilih’);
SELECT has_table_privilege( ​​`joe ‘、’ mytable ‘、’ INSERT、SELECT WITH GRANT OPTION ‘);

has_sequence_privilegememeriksa apakah pengguna dapat mengakses urutan dengan cara tertentu. Kemungkinan untuk argumennya analog dengan has_table_privilege. Jenis hak akses yang diinginkan harus mengevaluasi ke salah satu USAGE , SELECT , atau UPDATE.

has_any_column_privilegememeriksa apakah pengguna dapat mengakses kolom mana pun dari tabel dengan cara tertentu. Kemungkinan argumennya analog dengan has_table_privilege, kecuali bahwa jenis hak akses yang diinginkan harus mengevaluasi beberapa kombinasi SELECT , INSERT , UPDATE , atau REFERENCES . Perhatikan bahwa memiliki salah satu dari hak istimewa ini di tingkat tabel secara implisit memberikannya untuk setiap kolom tabel, jadi has_any_column_privilegeakan selalu mengembalikan true jika has_table_privilegetidak untuk argumen yang sama. Tetapi has_any_column_privilegejuga berhasil jika ada pemberian hak istimewa tingkat kolom untuk setidaknya satu kolom.

has_column_privilegememeriksa apakah pengguna dapat mengakses kolom dengan cara tertentu. Kemungkinan argumennya analog dengan has_table_privilege, dengan tambahan bahwa kolom dapat ditentukan baik dengan nama atau nomor atribut. Jenis hak akses yang diinginkan harus mengevaluasi beberapa kombinasi SELECT , INSERT , UPDATE , atau REFERENCES . Perhatikan bahwa memiliki salah satu dari hak istimewa ini di tingkat tabel secara implisit memberikannya untuk setiap kolom tabel.

has_database_privilegememeriksa apakah pengguna dapat mengakses database dengan cara tertentu. Kemungkinan argumennya analog dengan has_table_privilege. Jenis hak akses yang diinginkan harus mengevaluasi beberapa kombinasi CREATE , CONNECT , TEMPORARY , atau TEMP (yang setara dengan TEMPORARY).

has_function_privilegememeriksa apakah pengguna dapat mengakses fungsi dengan cara tertentu. Kemungkinan argumennya analog dengan has_table_privilege. Saat menentukan fungsi dengan string teks dan bukan dengan OID, input yang diizinkan sama dengan tipe data prosedur ulang (lihat Bagian 8.16 ). Jenis hak akses yang diinginkan harus dievaluasi menjadi EXECUTE . Contohnya adalah:
SELECT has_function_privilege(‘joeuser’, ‘myfunc(int, teks)’, ‘execute’);

has_foreign_data_wrapper_privilegememeriksa apakah pengguna dapat mengakses pembungkus data asing dengan cara tertentu. Kemungkinan argumennya analog dengan has_table_privilege. Jenis hak akses yang diinginkan harus dievaluasi ke USAGE .

has_language_privilegememeriksa apakah pengguna dapat mengakses bahasa prosedural dengan cara tertentu. Kemungkinan argumennya analog dengan has_table_privilege. Jenis hak akses yang diinginkan harus dievaluasi ke USAGE.

has_schema_privilegememeriksa apakah pengguna dapat mengakses skema dengan cara tertentu. Kemungkinan argumennya analog dengan has_table_privilege. Jenis hak akses yang diinginkan harus dievaluasi ke beberapa kombinasi CREATE atau USAGE.

has_server_privilegememeriksa apakah pengguna dapat mengakses server asing dengan cara tertentu. Kemungkinan argumennya analog dengan has_table_privilege. Jenis hak akses yang diinginkan harus dievaluasi ke USAGE .

has_tablespace_privilegememeriksa apakah pengguna dapat mengakses tablespace dengan cara tertentu. Kemungkinan argumennya analog dengan has_table_privilege. Jenis hak akses yang diinginkan harus dievaluasi menjadi CREATE.

pg_has_rolememeriksa apakah pengguna dapat mengakses peran dengan cara tertentu. Kemungkinan argumennya analog dengan has_table_privilege. Jenis hak akses yang diinginkan harus mengevaluasi beberapa kombinasi MEMBER atau USAGE . MEMBER menunjukkan keanggotaan langsung atau tidak langsung dalam peran (yaitu, hak untuk melakukan SET ROLE ), sedangkan USAGE menunjukkan apakah hak istimewa dari peran tersebut segera tersedia tanpa melakukan SET ROLE.

Setiap fungsi melakukan pemeriksaan visibilitas untuk satu jenis objek database. Perhatikan bahwa pg_table_is_visiblejuga dapat digunakan dengan tampilan, indeks, dan urutan; pg_type_is_visiblejuga dapat digunakan dengan domain. Untuk fungsi dan operator, objek di jalur pencarian terlihat jika tidak ada objek dengan nama dan tipe data argumen yang sama sebelumnya di jalur. Untuk kelas operator, baik nama dan metode akses indeks terkait dipertimbangkan.

Semua fungsi ini memerlukan OID objek untuk mengidentifikasi objek yang akan diperiksa. Jika Anda ingin menguji objek berdasarkan nama, akan lebih mudah untuk menggunakan jenis alias OID ( regclass , regtype , regprocedure , regoperator , regconfig , atau regdictionary ), misalnya:
SELECT pg_type_is_visible(‘myschema.widget’::regtype);

format_typemengembalikan nama SQL dari tipe data yang diidentifikasi oleh tipe OID dan mungkin pengubah tipe. Lewati NULL untuk pengubah tipe jika tidak ada pengubah spesifik yang diketahui.

pg_get_keywordsmengembalikan satu set catatan yang menjelaskan kata kunci SQL yang dikenali oleh server. Kolom kata berisi kata kunci. Kolom catcode berisi kode kategori: U untuk unreserved, C untuk nama kolom, T untuk tipe atau nama fungsi, atau R untuk reserved. Kolom catdesc berisi string yang mungkin dilokalkan yang menjelaskan kategori.

pg_get_constraintdef, pg_get_indexdef, pg_get_ruledef, dan pg_get_triggerdef, masing-masing merekonstruksi perintah pembuatan untuk batasan, indeks, aturan, atau pemicu. (Perhatikan bahwa ini adalah rekonstruksi yang didekompilasi, bukan teks asli dari perintah.) pg_get_expr mendekompilasi bentuk internal dari ekspresi individu, seperti nilai default untuk kolom. Ini dapat berguna saat memeriksa isi katalog sistem. Jika ekspresi mungkin berisi Vars, tentukan OID dari relasi yang mereka rujuk sebagai parameter kedua; jika tidak ada Vars yang diharapkan, nol sudah cukup. pg_get_viewdefmerekonstruksi kueri SELECT yang mendefinisikan tampilan. Sebagian besar fungsi ini hadir dalam dua varian, salah satunya dapat secara opsional “mencetak cantik”hasil. Format yang dicetak cantik lebih mudah dibaca, tetapi format default lebih cenderung ditafsirkan dengan cara yang sama oleh PostgreSQL versi mendatang ; hindari menggunakan output yang dicetak cantik untuk tujuan dump. Melewati false untuk parameter pretty-print menghasilkan hasil yang sama dengan varian yang tidak memiliki parameter sama sekali.

pg_get_functiondefmengembalikan pernyataan CREATE OR REPLACE FUNCTION lengkap untuk suatu fungsi. pg_get_function_argumentsmengembalikan daftar argumen suatu fungsi, dalam bentuk yang diperlukan untuk muncul di dalam CREATE FUNCTION . pg_get_function_resultsama mengembalikan klausa RETURNS yang sesuai untuk fungsi tersebut. pg_get_function_identity_argumentsmengembalikan daftar argumen yang diperlukan untuk mengidentifikasi suatu fungsi, dalam bentuk yang diperlukan untuk muncul di dalam ALTER FUNCTION , misalnya. Formulir ini menghilangkan nilai default.

pg_get_serial_sequencemengembalikan nama urutan yang terkait dengan kolom, atau NULL jika tidak ada urutan yang dikaitkan dengan kolom. Parameter input pertama adalah nama tabel dengan skema opsional, dan parameter kedua adalah nama kolom. Karena parameter pertama berpotensi skema dan tabel, itu tidak diperlakukan sebagai pengidentifikasi yang dikutip ganda, yang berarti huruf kecil secara default, sedangkan parameter kedua, hanya nama kolom, diperlakukan sebagai kutipan ganda dan memiliki kasus dipertahankan. Fungsi mengembalikan nilai yang diformat dengan tepat untuk diteruskan ke fungsi urutan. Asosiasi ini dapat dimodifikasi atau dihapus dengan ALTER SEQUENCE OWNED BY .Fungsinya mungkin seharusnya dipanggilpg_get_owned_sequence; namanya saat ini mencerminkan fakta bahwa itu biasanya digunakan dengan kolom serial atau serial besar.

pg_get_userbyid mengekstrak nama peran yang diberikan OID-nya.

pg_tablespace_databasesmemungkinkan tablespace untuk diperiksa. Ini mengembalikan set OID database yang memiliki objek yang disimpan di tablespace. Jika fungsi ini mengembalikan baris apa pun, tablespace tidak kosong dan tidak dapat dihapus. Untuk menampilkan objek tertentu yang mengisi tablespace, Anda harus terhubung ke database yang diidentifikasi oleh pg_tablespace_databasesdan menanyakan katalog pg_class mereka .

pg_typeofmengembalikan OID dari tipe data dari nilai yang diteruskan ke sana. Ini dapat membantu untuk pemecahan masalah atau membuat kueri SQL secara dinamis. Fungsi dideklarasikan sebagai mengembalikan regtype , yang merupakan tipe alias OID (lihat Bagian 8.16 ); ini berarti sama dengan OID untuk tujuan perbandingan tetapi ditampilkan sebagai nama tipe.

Bentuk dua parameter obj_descriptionmengembalikan komentar untuk objek database yang ditentukan oleh OID-nya dan nama katalog sistem yang berisi. Misalnya, obj_description(123456,’pg_class’) akan mengambil komentar untuk tabel dengan OID 123456. Bentuk satu parameter dari obj_descriptionhanya membutuhkan objek OID. Itu tidak digunakan lagi karena tidak ada jaminan bahwa OID unik di seluruh katalog sistem yang berbeda; oleh karena itu, komentar yang salah dapat dikembalikan.

shobj_descriptiondigunakan sama seperti obj_descriptionkecuali digunakan untuk mengambil komentar pada objek bersama. Beberapa katalog sistem bersifat global untuk semua database dalam setiap cluster dan deskripsinya juga disimpan secara global.

Jenis ID transaksi internal ( xid ) lebarnya 32 bit dan membungkus setiap 4 miliar transaksi. Namun, fungsi-fungsi ini mengekspor format 64-bit yang diperluas dengan penghitung “Epoch” sehingga tidak akan terbungkus selama masa instalasi. Tipe data yang digunakan oleh fungsi ini, txid_snapshot , menyimpan informasi tentang visibilitas ID transaksi pada waktu tertentu.