Driver JDBC PostgreSQL (disingkat PgJDBC) memungkinkan program Java terhubung ke database PostgreSQL menggunakan kode Java standar yang tidak bergantung pada database. Merupakan driver JDBC sumber terbuka yang ditulis dalam Java Murni (Tipe 4), dan berkomunikasi dalam protokol jaringan asli PostgreSQL.
Versi driver saat ini harus kompatibel dengan PostgreSQL 8.4 dan lebih tinggi menggunakan protokol versi 3.0 dan Java 8 (JDBC 4.2) atau lebih tinggi. Kecuali Anda memiliki persyaratan yang tidak biasa (menjalankan aplikasi lama atau JVM), driver inilah yang harus Anda gunakan.
Tes regresi PgJDBC dijalankan terhadap semua versi PostgreSQL sejak 9.1, termasuk versi "build PostgreSQL dari git master". Ada cabang turunan PostgreSQL lainnya tetapi belum disertifikasi untuk dijalankan dengan PgJDBC. Jika Anda menemukan bug atau regresi pada versi yang didukung, harap ajukan Masalah.
Catatan: Versi PgJDBC sejak 42.8.0 tidak dijamin berfungsi dengan PostgreSQL yang lebih lama dari 9.1.
Kebanyakan orang tidak perlu mengkompilasi PgJDBC. Anda dapat mengunduh driver (jar) yang telah dikompilasi dari situs PostgreSQL JDBC atau menggunakan alat manajemen ketergantungan pilihan Anda:
Anda dapat mencari di The Central Repository dengan GroupId dan ArtifactId org.postgresql:postgresql.
<!-- Add the following dependency to your pom.xml, -->
<!-- replacing LATEST with specific version as required -->
< dependency >
< groupId >org.postgresql</ groupId >
< artifactId >postgresql</ artifactId >
< version >LATEST</ version >
</ dependency >
Pembuatan snapshot (pembuatan dari cabang master
) juga diterapkan ke Repositori Snapshot Sonatype OSS, sehingga Anda dapat menguji versi pengembangan saat ini (menguji beberapa perbaikan bug) dengan mengaktifkan repositori dan menggunakan versi SNAPSHOT terbaru.
Ada juga RPM biner (snapshot) yang tersedia di repositori Copr Fedora.
Untuk informasi lebih lanjut Anda dapat membaca dokumentasi driver PgJDBC atau untuk dokumentasi umum JDBC silakan merujuk ke Tutorial Java™.
Implementasi | Kelas |
---|---|
java.sql.Driver | org.postgresql.Driver |
javax.sql.DataSource | org.postgresql.ds.PGSimpleDataSource |
javax.sql.ConnectionPoolDataSource | org.postgresql.ds.PGConnectionPoolDataSource |
javax.sql.XADataSource | org.postgresql.xa.PGXADataSource |
Pengemudi mengenali URL JDBC dalam bentuk:
jdbc:postgresql:database
jdbc:postgresql:
jdbc:postgresql://host/database
jdbc:postgresql://host/
jdbc:postgresql://host:port/database
jdbc:postgresql://host:port/
jdbc:postgresql://?service=myservice
Format umum URL JDBC untuk menyambung ke server PostgreSQL adalah sebagai berikut, dengan item dalam tanda kurung siku ([ ]) bersifat opsional:
jdbc:postgresql:[//host[:port]/][database][?property1=value1[&property2=value2]...]
Di mana:
localhost
.5432
. PgJDBC menggunakan java.util.logging untuk pencatatan. Untuk mengonfigurasi level log dan mengontrol tujuan keluaran log (misalnya file atau konsol), konfigurasikan properti java.util.logging Anda sesuai untuk logger org.postgresql. Perhatikan bahwa tingkat log paling detail, " FINEST
", mungkin menyertakan informasi sensitif seperti detail koneksi, kueri SQL, atau parameter perintah.
Selain parameter koneksi standar, driver mendukung sejumlah properti tambahan yang dapat digunakan untuk menentukan perilaku driver tambahan khusus untuk PostgreSQL™. Properti ini dapat ditentukan dalam URL koneksi atau parameter objek Properti tambahan ke DriverManager.getConnection.
Milik | Jenis | Bawaan | Keterangan |
---|---|---|---|
pengguna | Rangkaian | batal | Pengguna database atas nama siapa koneksi dibuat. |
kata sandi | Rangkaian | batal | Kata sandi pengguna basis data. |
pilihan | Rangkaian | batal | Tentukan parameter inisialisasi koneksi 'opsi'. |
melayani | Rangkaian | batal | Tentukan nama 'layanan' yang dijelaskan dalam file pg_service.conf. Referensi: File Layanan Koneksi dan File Kata Sandi. File 'layanan' dapat menyediakan semua properti termasuk 'nama host=', 'port=' dan 'namadb='. |
sl | Boolean | PALSU | Kontrol penggunaan SSL (nilai sebenarnya menyebabkan SSL diperlukan) |
pabrik ssl | Rangkaian | org.postgresql.ssl.LibPQFactory | Berikan kelas SSLSocketFactory saat menggunakan SSL. |
sslfactoryarg (tidak digunakan lagi) | Rangkaian | batal | Argumen diteruskan ke konstruktor kelas SSLSocketFactory. |
slmode | Rangkaian | lebih menyukai | Mengontrol preferensi untuk membuka menggunakan koneksi terenkripsi SSL. |
sertifikat | Rangkaian | batal | Lokasi sertifikat SSL klien |
slkey | Rangkaian | batal | Lokasi kunci SSL PKCS#8 atau PKCS#12 klien, untuk PKCS ekstensinya harus .p12 atau .pfx dan aliasnya harus user |
sslrootcert | Rangkaian | batal | Lokasi sertifikat akar untuk mengautentikasi server. |
sslhostnameverifier | Rangkaian | batal | Nama kelas (untuk digunakan dalam Class.forName(String)) yang mengimplementasikan javax.net.ssl.HostnameVerifier dan dapat memverifikasi nama host server. |
sslpasswordcallback | Rangkaian | batal | Nama kelas (untuk digunakan dalam Class.forName(String)) yang mengimplementasikan javax.security.auth.callback.CallbackHandler dan dapat menangani PasswordCallback untuk kata sandi ssl. |
kata sandi sl | Rangkaian | batal | Kata sandi untuk kunci ssl klien (diabaikan jika sslpasswordcallback disetel) |
negosiasi cepat | Rangkaian | postgres | Menentukan apakah negosiasi ssl ALPN akan digunakan atau tidak. Atur ke direct untuk memilih ALPN. |
kirimBufferSize | Bilangan bulat | -1 | Ukuran buffer penulisan soket |
maxSendBufferSize | Bilangan bulat | 65536 | Jumlah maksimum byte yang di-buffer sebelum dikirim ke backend. pgjdbc menggunakan least(maxSendBufferSize, greatest(8192, SO_SNDBUF)) untuk menentukan ukuran buffer. |
menerimaBufferSize | Bilangan bulat | -1 | Ukuran buffer baca soket |
logServerErrorDetail | Boolean | BENAR | Mengizinkan detail kesalahan server (seperti pernyataan dan nilai sql) dicatat dan diteruskan dalam pengecualian. Menyetel ke false akan menutupi kesalahan ini sehingga tidak akan terlihat oleh pengguna, atau log. |
izinkan EncodingChanges | Boolean | PALSU | Izinkan perubahan pada client_encoding |
logKoneksi Tidak Tertutup | Boolean | PALSU | Ketika koneksi yang tidak ditutup secara eksplisit adalah sampah yang dikumpulkan, catat stacktrace dari pembukaan koneksi untuk melacak sumber kebocoran |
binerTransfer | Boolean | BENAR | Aktifkan transfer biner untuk tipe bawaan yang didukung jika memungkinkan. Menyetelnya ke false akan menonaktifkan transfer biner apa pun kecuali jika diaktifkan satu per satu untuk setiap jenis dengan binaryTransferEnable . Apakah transfer biner dapat digunakan tergantung pada pernyataan yang disiapkan di sisi server (lihat prepareThreshold ). |
binerTransferEnable | Rangkaian | "" | Daftar jenis yang dipisahkan koma untuk mengaktifkan transfer biner. Entah nomor OID atau nama. |
binerTransferDisable | Rangkaian | "" | Daftar jenis yang dipisahkan koma untuk menonaktifkan transfer biner. Entah nomor atau nama OID. Mengganti nilai dalam kumpulan default driver dan nilai yang disetel dengan binerTransferEnable. |
mempersiapkan Ambang Batas | Bilangan bulat | 5 | Tentukan jumlah eksekusi PreparedStatement yang diperlukan sebelum beralih menggunakan pernyataan yang disiapkan di sisi server. Standarnya adalah lima, artinya mulai menggunakan pernyataan yang disiapkan sisi server pada eksekusi kelima objek PreparedStatement yang sama. Nilai -1 mengaktifkan pernyataan yang disiapkan sisi server dan memaksa transfer biner untuk tipe yang diaktifkan (lihat binaryTransfer ). |
readyStatementCacheQueries | Bilangan bulat | 256 | Menentukan jumlah maksimum entri dalam cache per koneksi dari pernyataan yang disiapkan. Nilai 0 menonaktifkan cache. |
siapStatementCacheSizeMiB | Bilangan bulat | 5 | Menentukan ukuran maksimum (dalam megabyte) dari cache pernyataan yang disiapkan per koneksi. Nilai 0 menonaktifkan cache. |
defaultRowFetchSize | Bilangan bulat | 0 | Jumlah baris positif yang harus diambil dari database ketika lebih banyak baris diperlukan untuk ResultSet pada setiap iterasi pengambilan |
waktu masuk habis | Bilangan bulat | 0 | Tentukan berapa lama dalam detik maks (2147484) untuk menunggu pembentukan koneksi database. |
koneksiWaktu habis | Bilangan bulat | 10 | Nilai batas waktu dalam detik maks (2147484) yang digunakan untuk operasi penyambungan soket. |
waktu soket habis | Bilangan bulat | 0 | Nilai batas waktu dalam detik maks (2147484) digunakan untuk operasi pembacaan soket. |
batalkanSignalTimeout | Bilangan bulat | 10 | Batas waktu yang digunakan untuk mengirimkan perintah pembatalan. |
sslResponseTimeout | Bilangan bulat | 5000 | Batas waktu soket dalam milidetik menunggu respons dari permintaan peningkatan SSL dari server. |
tcpKeepAlive | Boolean | PALSU | Mengaktifkan atau menonaktifkan TCP tetap hidup. |
tcpNoDelay | Boolean | BENAR | Mengaktifkan atau menonaktifkan TCP tanpa penundaan. |
Nama Aplikasi | Rangkaian | Pengandar JDBC PostgreSQL | Nama aplikasi (memerlukan versi server >= 9.0). Jika asumsiMinServerVersion diatur ke >= 9.0, ini akan dikirim dalam paket startup, jika tidak, setelah koneksi dibuat |
hanya baca | Boolean | PALSU | Menempatkan koneksi ini dalam mode read-only |
bacaHanyaMode | Rangkaian | transaksi | Menentukan perilaku ketika koneksi diatur menjadi hanya baca, nilai yang mungkin: abaikan, transaksi, selalu |
nonaktifkanColumnSanitizer | Boolean | PALSU | Aktifkan pengoptimalan yang menonaktifkan pembersih nama kolom |
asumsikanMinServerVersion | Rangkaian | batal | Asumsikan server setidaknya memiliki versi itu |
Skema saat ini | Rangkaian | batal | Tentukan skema (atau beberapa skema yang dipisahkan dengan koma) yang akan disetel di jalur pencarian |
targetServerType | Rangkaian | setiap | Menentukan jenis server yang akan dihubungkan, nilai yang mungkin: any, master, slave (tidak digunakan lagi), sekunder, preferSlave (tidak digunakan lagi), preferSecondary, preferPrimary |
hostRecheckSeconds | Bilangan bulat | 10 | Menentukan periode (detik) setelah status host diperiksa lagi jika statusnya berubah |
loadBalanceHosts | Boolean | PALSU | Jika host yang dinonaktifkan terhubung dalam urutan yang diberikan. Jika host diaktifkan dipilih secara acak dari kumpulan kandidat yang sesuai |
pabrik soket | Rangkaian | batal | Tentukan pabrik soket untuk pembuatan soket |
socketFactoryArg (tidak digunakan lagi) | Rangkaian | batal | Argumen diteruskan ke konstruktor kelas SocketFactory. |
simpan otomatis | Rangkaian | tidak pernah | Menentukan apa yang harus dilakukan pengemudi jika kueri gagal, nilai yang mungkin: selalu, tidak pernah, konservatif |
pembersihanSavepoints | Boolean | PALSU | Dalam mode Penyimpanan Otomatis, pengemudi menetapkan SAVEPOINT untuk setiap permintaan. Dimungkinkan untuk menghabiskan buffer bersama server. Menyetelnya ke true akan melepaskan setiap SAVEPOINT dengan biaya perjalanan pulang pergi tambahan. |
lebih memilihQueryMode | Rangkaian | diperpanjang | Menentukan mode mana yang digunakan untuk mengeksekusi kueri ke database, nilai yang mungkin: extended, extendedForPrepared, extendedCacheEverything, simple |
menulis ulangBatchedInserts | Boolean | PALSU | Aktifkan pengoptimalan untuk menulis ulang dan menciutkan pernyataan INSERT yang kompatibel dan dikumpulkan. |
escapeSyntaxCallMode | Rangkaian | memilih | Menentukan bagaimana sintaks panggilan escape JDBC diubah menjadi SQL yang mendasarinya (CALL/SELECT), untuk menjalankan prosedur atau fungsi (memerlukan versi server >= 11), nilai yang mungkin: pilih, callIfNoReturn, call |
maxResultBuffer | Rangkaian | batal | Menentukan ukuran buffer hasil dalam byte, yang tidak dapat dilampaui selama pembacaan kumpulan hasil. Dapat ditentukan sebagai ukuran tertentu (yaitu "100", "200M" "2G") atau sebagai persen dari memori heap maksimal (yaitu "10p", "20pct", "50percent") |
gssLib | Rangkaian | mobil | Nilai yang diizinkan adalah auto (default, lihat di bawah), sspi (force SSPI) atau gssapi (force GSSAPI-JSSE). |
gssResponseTimeout | Bilangan bulat | 5000 | Batas waktu soket dalam milidetik menunggu respons dari permintaan koneksi terenkripsi GSS dari server. |
gssEncMode | Rangkaian | mengizinkan | Mengontrol preferensi penggunaan enkripsi GSSAPI untuk koneksi, nilainya dinonaktifkan, diizinkan, dipilih, dan diwajibkan |
gunakanSpnego | Rangkaian | PALSU | Gunakan SPNEGO dalam permintaan otentikasi SSPI |
Ambil adaptif | Boolean | PALSU | Menentukan apakah jumlah baris yang diambil di ResultSet oleh setiap iterasi pengambilan harus dinamis. Jumlah baris akan dihitung dengan membagi ukuran maxResultBuffer dengan ukuran baris maksimal yang diamati sejauh ini. Memerlukan deklarasi maxResultBuffer dan defaultRowFetchSize untuk iterasi pertama. |
adaptifFetchMinimum | Bilangan bulat | 0 | Menentukan jumlah baris minimum, yang dapat dihitung dengan adaptiveFetch. Jumlah baris yang digunakan oleh adaptiveFetch tidak boleh kurang dari nilai ini. |
adaptifFetchMaksimum | Bilangan bulat | -1 | Menentukan jumlah baris maksimum, yang dapat dihitung dengan adaptiveFetch. Jumlah baris yang digunakan oleh adaptiveFetch tidak boleh melebihi nilai ini. Angka negatif apa pun yang ditetapkan sebagai adaptiveFetchMaximum digunakan oleh adaptiveFetch sebagai jumlah baris tak terhingga. |
alamatSocket lokal | Rangkaian | batal | Nama host atau alamat IP diberikan untuk secara eksplisit mengkonfigurasi antarmuka yang akan diikatkan oleh driver pada sisi klien dari koneksi TCP/IP saat menghubungkan. |
kutipanReturningIdentifiers | Boolean | BENAR | Secara default, kami mengutip ganda pengidentifikasi yang mengembalikan. Beberapa ORM sudah mengutipnya. Switch memungkinkan mereka untuk mematikannya |
otentikasiPluginClassName | Rangkaian | batal | Nama kelas yang sepenuhnya memenuhi syarat dari kelas yang mengimplementasikan antarmuka AuthenticationPlugin. Jika ini null, nilai kata sandi di properti koneksi akan digunakan. |
Panjangnya tidak diketahui | Bilangan bulat | Bilangan bulat.MAX_LENGTH | Menentukan panjang yang akan dikembalikan untuk jenis panjang yang tidak diketahui |
tipe string | Rangkaian | batal | Tentukan jenis yang akan digunakan saat mengikat parameter PreparedStatement yang disetel melalui setString() |
pengikatan saluran | Rangkaian | lebih menyukai | Opsi ini mengontrol penggunaan pengikatan saluran oleh klien. require berarti koneksi harus menggunakan pengikatan saluran, prefer berarti klien akan memilih pengikatan saluran jika tersedia, dan disable mencegah penggunaan pengikatan saluran. |
Milik | Jenis | Bawaan | Keterangan |
---|---|---|---|
pgjdbc.config.cleanup.thread.ttl | panjang | 30000 | Pengemudi memiliki thread pembersihan internal yang memantau dan membersihkan koneksi yang tidak tertutup. Properti ini menetapkan durasi (dalam milidetik) thread pembersihan akan tetap berjalan jika tidak ada yang perlu dibersihkan. |
Untuk informasi tentang cara berkontribusi pada proyek, lihat Pedoman Berkontribusi