Menghubungkan n8n ke PostgreSQL dan MySQL

n8n bisa membaca dan menulis langsung ke PostgreSQL dan MySQL lewat node bawaan bernama Postgres dan MySQL. Anda cukup membuat kredensial (host, port, nama database, user, password), lalu memilih operasi: ambil data, tambah baris, update, hapus, atau jalankan query SQL sendiri. Dari situ, data order, pelanggan, atau stok bisa bergerak otomatis antara aplikasi dan database tanpa export-import manual.

Yang sering jadi masalah bukan cara menghubungkannya, tapi hal-hal di sekitarnya: user database yang terlalu berkuasa, query berat di jam sibuk, dan data yang setengah tersimpan saat workflow gagal. Artikel ini membahas semuanya dengan contoh yang realistis.

Kalau SQL masih terasa asing, baca dulu pengertian SQL supaya contoh query di bawah lebih mudah diikuti.

Menyiapkan user database khusus n8n

Jangan pakai user root atau user utama aplikasi untuk n8n. Buat user terpisah dengan hak akses secukupnya. Kalau suatu saat kredensial n8n bocor atau ada workflow yang salah tulis, kerusakannya terbatas.

Prinsipnya:

  • Satu user khusus n8n, misalnya n8n_writer.
  • Hak akses per tabel. Kalau workflow hanya perlu membaca tabel orders dan menulis ke order_sync, berikan izin sebatas itu.
  • Tanpa hak DROP atau ALTER. n8n tidak perlu mengubah struktur tabel.
  • Batasi dari mana user bisa login. Di MySQL, user bisa dibatasi per host. Di PostgreSQL, atur lewat pg_hba.conf atau firewall server.

Contoh di PostgreSQL:

CREATE USER n8n_writer WITH PASSWORD 'ganti-dengan-password-kuat';
GRANT SELECT ON orders TO n8n_writer;
GRANT SELECT, INSERT, UPDATE ON order_sync TO n8n_writer;

Satu hal lagi soal jaringan. Kalau n8n Anda di cloud dan database ada di server kantor, database harus bisa diakses dari internet. Ini berisiko. Pilihan yang lebih aman: pasang n8n self-hosted di jaringan yang sama dengan database, atau pakai koneksi SSH tunnel yang didukung oleh node Postgres dan MySQL di n8n.

Query, insert, dan upsert

Node Postgres dan MySQL di n8n punya operasi yang mirip:

  • Select: mengambil baris dari tabel dengan filter dan urutan tertentu.
  • Insert: menambah baris baru.
  • Update: mengubah baris yang sudah ada.
  • Insert or Update (upsert): menambah kalau belum ada, mengubah kalau sudah ada.
  • Delete: menghapus baris atau isi tabel.
  • Execute Query / Execute SQL: menjalankan SQL bebas yang Anda tulis sendiri.

Untuk sinkronisasi, upsert biasanya paling berguna. Misalnya data order dari toko online dikirim ulang karena ada perubahan status. Dengan upsert berdasarkan kolom order_id, order yang sama tidak tercatat dua kali. Syaratnya, kolom kunci itu harus unik di database (primary key atau unique constraint).

Pakai query parameters, jangan gabung teks

Saat menulis SQL sendiri, jangan menempelkan nilai langsung ke query seperti ini:

SELECT * FROM customers WHERE email = '{{ $json.email }}';

Kalau isi email berisi tanda kutip atau teks aneh, query bisa rusak, bahkan membuka celah SQL injection (teknik menyusupkan perintah SQL lewat data masukan). Gunakan placeholder dan isi nilainya di kolom Query Parameters:

SELECT * FROM customers WHERE email = $1;

Lalu isi Query Parameters dengan {{ $json.email }}. Menurut dokumentasi resmi n8n, nilai di Query Parameters disanitasi sehingga aman dari SQL injection.

Menghindari query berat di jam kerja

Database aplikasi dipakai oleh pengguna sungguhan. Kalau workflow n8n menjalankan query besar saat jam ramai, aplikasi bisa melambat dan kasir atau admin yang kena getahnya.

Beberapa kebiasaan yang membantu:

  • Ambil data secara bertahap. Jangan SELECT * semua order setiap kali. Ambil yang berubah sejak eksekusi terakhir, misalnya berdasarkan kolom updated_at.
  • Jadwalkan tugas berat di luar jam kerja. Rekap bulanan atau pembersihan data bisa jalan jam 2 pagi lewat Schedule Trigger.
  • Pastikan ada index. Kolom yang sering dipakai untuk filter, seperti updated_at atau order_id, sebaiknya punya index.
  • Pakai read replica kalau ada. Untuk laporan yang hanya membaca, arahkan n8n ke salinan database, bukan database utama.
  • Batasi jumlah baris. Tambahkan LIMIT dan proses per batch kalau datanya ribuan baris.

Transaksi dan konsistensi data

Bayangkan workflow menyimpan header order ke tabel orders, lalu 5 item ke tabel order_items. Di item ketiga, workflow gagal. Hasilnya: order tercatat, tapi itemnya setengah. Laporan jadi salah dan susah dilacak.

Transaksi (transaction) mencegah hal ini. Semua query dalam satu transaksi dianggap satu paket: berhasil semua, atau dibatalkan semua (rollback).

Di node Postgres dan MySQL n8n, ada opsi Query Batching dengan tiga pilihan:

Mode Cara kerja Kapan dipakai
Single Query Semua item digabung jadi satu operasi Insert data banyak sekaligus
Independently Satu query per item Item saling tidak bergantung
Transaction Semua query dalam satu transaksi, rollback kalau ada yang gagal Data yang harus konsisten, seperti order dan itemnya

Untuk alur yang lebih rumit, misalnya menulis ke dua tabel di dua node berbeda, pertimbangkan menulis satu query SQL atau stored procedure yang menangani semuanya dalam satu transaksi. Tambahkan juga penanganan error supaya Anda tahu saat ada yang gagal, bukan menemukannya seminggu kemudian.

Contoh: sinkron order ke database

Misalnya sebuah toko menerima order dari website. Tim ingin semua order tersimpan rapi di PostgreSQL untuk laporan dan dashboard.

Alurnya di n8n:

  1. Webhook Trigger menerima data order setiap ada checkout. Cara kerjanya dijelaskan di artikel webhook n8n.
  2. Edit Fields (Set) merapikan format: tanggal jadi format standar, nominal jadi angka, nomor HP diseragamkan.
  3. Postgres, Insert or Update ke tabel orders berdasarkan order_id.
  4. Postgres, Insert item order ke order_items dengan mode Transaction.
  5. IF: kalau nominal di atas batas tertentu, kirim notifikasi ke tim sales.
  6. Error workflow mengirim pesan ke admin kalau ada langkah yang gagal.

Tambahan yang berguna: satu workflow terjadwal setiap malam yang mencocokkan jumlah order di website dengan di database. Kalau selisih, admin langsung tahu.

Pola yang sama bisa dipakai untuk MySQL. Bedanya hanya di kredensial dan sedikit perbedaan sintaks SQL.

Kalau Anda ingin n8n terhubung aman ke database aplikasi atau data warehouse tanpa mengganggu sistem yang sedang jalan, Aqilatic bisa membantu merancangnya. Mulai dari audit proses gratis, atau lihat layanan kami.

Pertanyaan yang sering muncul

Apakah n8n Cloud bisa terhubung ke database di server kantor?

Bisa, asalkan database bisa diakses dari internet, idealnya lewat SSH tunnel dan IP yang dibatasi. Kalau database tidak boleh terbuka ke luar, n8n self-hosted di jaringan yang sama lebih aman.

Apa bedanya node Postgres dan MySQL di n8n?

Operasinya hampir sama: select, insert, update, upsert, delete, dan query SQL bebas. Perbedaannya ada di kredensial dan sintaks SQL masing-masing database.

Apakah aman memberi n8n akses tulis ke database produksi?

Aman kalau aksesnya dibatasi. Buat user khusus dengan izin per tabel, tanpa hak mengubah struktur, pakai query parameters, dan uji workflow di database staging dulu.