DocsStack & database
Data browser
Melihat isi tabel, menjalankan query, dan ekspor/impor SQL langsung dari dashboard — tanpa client database tambahan.
- Di mana
- Halaman database → tab Data
- Bisa
- Lihat/edit/hapus baris, struktur tabel, query, CSV, ekspor/impor SQL
- Batas
- 500 baris, 15 detik, 60 query/menit, riwayat 50 entri
Tata letak
- 01kiridaftar tabel (atau key Redis) + perkiraan jumlah baris
- 02kanan atasgrid baris, 50 per halaman, klik header untuk sort, tab Struktur
- 03kanan bawahkotak query — Ctrl+Enter untuk menjalankan, tab Riwayat
- 04toolbarpilih database, muat ulang, Ekspor CSV/SQL, Impor SQL
Untuk server dengan lebih dari satu database, select Database di toolbar memilih mana yang dilihat; owner/admin bisa membuat database baru dari sana (tombol Buat database).
Menjalankan query
| Engine | Yang dijalankan | Contoh |
|---|---|---|
| PostgreSQL | Satu statement SQL via psql | SELECT id, email FROM users ORDER BY id DESC |
| MySQL / MariaDB | Satu statement SQL via mysql | SHOW CREATE TABLE orders |
| Redis | Satu perintah via redis-cli | HGETALL session:abc |
- Hanya satu statement per query —
;di luar tanda kutip ditolak (400). Komentar--dan/* */dibersihkan lebih dulu. SELECT/WITHtanpaLIMITdibungkusLIMIT 501: maksimal 500 baris ditampilkan dengan tanda truncated. TambahkanLIMIT/OFFSETsendiri untuk menjelajah lebih jauh.- Timeout engine 15 detik (
statement_timeout/max_execution_time/max_statement_time). - Hasil membedakan
NULLdan string kosong; perintah non-SELECT mengembalikan pesan engine, mis.UPDATE 3. - Rate limit 60 query per menit per pengguna.
Edit & hapus baris, struktur tabel
Grid tidak hanya menampilkan — sel bisa diedit langsung, dan setiap baris punya aksi Hapus (owner/admin). Tab Struktur di sebelah grid menampilkan kolom dan indeks tabel tanpa perlu \d atau SHOW COLUMNS.
- Setiap tulis divalidasi, bukan dipercaya: klausa
WHEREharus persis primary key tabel itu — tidak sebagian, tidak lebih — dan kolom yang diubah dicocokkan ke kolom nyata tabel (bukan regex identifier), jadi nama kolom sepertifirst nametetap berfungsi. - Tabel tanpa primary key menolak edit/hapus (400) alih-alih diam-diam menulis ke seluruh tabel.
- Setelah menulis, API mengonfirmasi tepat satu baris yang berubah — dari command tag Postgres, atau
SELECT ROW_COUNT()di sesi yang sama untuk MySQL/ MariaDB. Primary key yang sudah usang (baris terhapus di tempat lain) menghasilkan 400, bukan sukses palsu. - Hanya owner/admin — member tetap terbatas baca saja seperti query.
Hak tulis per peran
| Peran | Boleh | Pagar |
|---|---|---|
| member | Statement yang diawali SELECT, WITH, SHOW, EXPLAIN, DESCRIBE, VALUES, TABLE. | Selain itu → 403, dan sesi engine dibuat read-only (default_transaction_read_only / SET SESSION TRANSACTION READ ONLY) — bahkan WITH … DELETE gagal di engine. |
| owner / admin | INSERT, UPDATE, DELETE, DDL, plus Impor SQL dan buat database. | Tidak ada — pakai dengan hati-hati; tidak ada undo. |
Redis: member hanya boleh perintah baca (GET, MGET, HGET*, LRANGE, SMEMBERS, ZRANGE, SCAN, …).
Ekspor CSV, ekspor & impor SQL
Ekspor CSV per tabel (semua peran)
Tombol Ekspor CSV di grid mengunduh tabel yang sedang dibuka sebagai
.csv— cocok untuk spreadsheet, tidak seperti dump SQL yang berisi seluruh database.Ekspor SQL (semua peran)
Tombol Ekspor SQL di toolbar mengunduh dump teks biasa database yang sedang dipilih (
<slug>[-db].sql). Cocok untuk memindahkan data ke tempat lain atau memeriksa struktur.Impor SQL (owner/admin)
Tombol Impor SQL menerima file
.sqlsampai 64 MB dan menjalankannya apa adanya di database yang dipilih — setelah konfirmasi. Daftar tabel dimuat ulang otomatis.
Riwayat query
Tab Riwayat mencatat sampai 50 query terakhir per pengguna per database — baik yang berhasil maupun yang gagal, supaya “apa yang barusan aku jalankan” selalu lengkap. Ini tabel terpisah, bukan bagian dari audit log instance.
Cara kerja
Setiap query dijalankan di container sekali-jalan dari image engine yang sama (pola yang dipakai backup), dengan kredensial lewat env dan output ditulis ke file lalu dibaca kembali. API tidak memuat driver database apa pun.
psql --csv · mysql --batch · redis-cli --jsonJebakan umum
| Gejala | Penyebab & solusi |
|---|---|
| 400: hanya satu statement | Ada ; di akhir atau beberapa statement. Jalankan satu per satu, atau pakai Impor SQL. |
| 403 sebagai member | Statement tulis. Minta owner/admin, atau jalankan lewat migrasi aplikasi (job). |
| Query berhenti di 15 detik | Tambahkan indeks/WHERE, atau jalankan dari aplikasi. Timeout tidak bisa dinaikkan dari UI. |
| Hasil terpotong 500 baris | Pakai LIMIT/OFFSET atau ekspor SQL. |
| Impor gagal di tengah | Statement sebelumnya sudah tereksekusi. Restore backup, perbaiki file, ulangi. |
| 400 saat edit/hapus baris | Tabel tidak punya primary key, atau baris itu sudah berubah/terhapus di tempat lain sejak grid dimuat. Muat ulang lalu coba lagi. |
Langkah berikutnya
Ada yang keliru? Edit halaman ini di GitLab ↗