

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Connect ke sumber data PostgreSQL
<a name="using-postgresql-in-AMG"></a>

 Anda dapat menggunakan sumber data PostgreSQL untuk menanyakan dan memvisualisasikan data dari database Amazon Aurora PostgreSQL Anda. 

**penting**  
*Grafana versi 8* mengubah struktur data yang mendasari frame data untuk sumber data Postgres, MySQL, dan Microsoft SQL Server. Akibatnya, hasil kueri deret waktu dikembalikan dalam format lebar. Untuk informasi selengkapnya, lihat [Format lebar](https://grafana.com/developers/plugin-tools/introduction/data-frames#wide-format) dalam dokumentasi bingkai data Grafana. Untuk membuat visualisasi Anda berfungsi seperti sebelum versi 8, Anda mungkin harus melakukan beberapa migrasi manual. Salah satu solusi didokumentasikan di Github di [Postgres/MySQL/MSSQL: Memecahkan perubahan di v8.0 terkait dengan kueri deret waktu dan](https://github.com/grafana/grafana/issues/35534) urutan kolom data.  
Di *Grafana versi 9*, sumber data PostgreSQL menyiapkan sertifikat root untuk menghubungkan ke database Anda secara berbeda dari versi sebelumnya. Jika Anda memperbarui ruang kerja dari versi 8 ke 9, Anda mungkin perlu mengubah cara Anda terhubung. Untuk informasi selengkapnya, lihat [Memecahkan masalah dengan ruang kerja yang diperbarui](AMG-workspace-version-update-troubleshoot.md).

## Menambahkan sumber data
<a name="postgresql-adding-the-data-source"></a>

1.  Buka menu samping dengan memilih ikon Grafana di header atas. 

1.  Di menu samping di bawah ikon **Konfigurasi**, Anda harus menemukan tautan **Sumber Data**. 

1.  Pilih tombol **\+ Tambahkan sumber data** di header atas. 

1.  **Pilih **PostgreSQL** dari daftar dropdown Type.** 

### Opsi sumber data
<a name="postgresql-data-source-options"></a>


|  Nama  |  Deskripsi  | 
| --- | --- | 
|  Name  |  Nama sumber data. Ini adalah bagaimana Anda melihat sumber data di panel dan kueri.  | 
|  Default  |  Sumber data default berarti bahwa itu akan dipilih sebelumnya untuk panel baru.  | 
|  Host  |  IP address/hostname dan port opsional instance PostgreSQL Anda. Jangan sertakan nama database. String koneksi untuk menghubungkan ke Postgres tidak akan benar dan akan menyebabkan kesalahan.  | 
|  Database  |  Nama database PostgreSQL Anda.  | 
|  User  |  Database pengguna login/username. | 
|  Password  |  Kata sandi pengguna basis data  | 
|  SSL Mode  |  Opsi ini menentukan apakah atau dengan prioritas apa TCP/IP koneksi SSL aman akan dinegosiasikan dengan server.  | 
|  Max open  |  Jumlah maksimum koneksi terbuka ke database, default unlimited (Grafana v5.4\+).  | 
|  Max idle  |  Jumlah maksimum koneksi di kolam koneksi idle, default 2 (Grafana v5.4\+).  | 
|  Max lifetime  |  Jumlah maksimum waktu dalam hitungan detik koneksi dapat digunakan kembali, default 14400 /4 jam (Grafana v5.4\+).  | 
|  Version  |  Opsi ini menentukan fungsi mana yang tersedia di pembuat kueri (hanya tersedia di Grafana 5.3\+).  | 
|  TimescaleDB  |  TimescaleDB adalah database deret waktu yang dibangun sebagai ekstensi PostgreSQL. Jika diaktifkan, Grafana akan digunakan time\_bucket di $\_\_timeGroup makro dan menampilkan fungsi agregat spesifik TimescaleDB di pembuat kueri (hanya tersedia di Grafana 5.3\+).  | 

### Interval waktu min
<a name="postgresql-min-time-interval"></a>

 Batas bawah untuk `$_interval` `$_interval_ms` variabel. Disarankan untuk diatur untuk menulis frekuensi, misalnya `1m` jika data Anda ditulis setiap menit. Opsi ini juga dapat berada overridden/configured di panel dasbor di bawah opsi sumber data. Nilai ini **harus** diformat sebagai angka diikuti oleh pengidentifikasi waktu yang valid; misalnya, `1m` (1 menit) atau `30s` (30 detik). Pengidentifikasi waktu berikut didukung.


|  Pengidentifikasi  |  Deskripsi  | 
| --- | --- | 
|  y  |  Tahun  | 
|  M  |  Bulan  | 
|  w  |  Minggu  | 
|  d  |  Hari  | 
|  h  |  Jam  | 
|  m  |  Menit  | 
|  s  |  Detik  | 
|  ms  |  Milidetik  | 

### Izin pengguna basis data
<a name="postgresql-database-user-permissions-important"></a>

**penting**  
 Pengguna database yang Anda tentukan saat Anda menambahkan sumber data seharusnya hanya diberikan izin SELECT pada database dan tabel tertentu yang ingin Anda kueri. Grafana tidak memvalidasi bahwa kueri aman. Kueri dapat mencakup pernyataan SQL apa pun. Misalnya, pernyataan seperti `DELETE FROM user;` dan `DROP TABLE user;` akan dijalankan. Untuk melindungi dari hal ini, kami sangat menyarankan Anda membuat pengguna PostgreSQL tertentu dengan izin terbatas. 

Kode contoh berikut menunjukkan pembuatan pengguna PostgreSQL specifice dengan izin terbatas. 

```
 CREATE USER grafanareader WITH PASSWORD 'password';
 GRANT USAGE ON SCHEMA schema TO grafanareader;
 GRANT SELECT ON schema.table TO grafanareader;
```

 Pastikan bahwa pengguna tidak mendapatkan izin yang tidak diinginkan dari peran publik. 

## Editor kueri
<a name="postgresql-query-editor"></a>

 Anda menemukan editor kueri PostgreSQL di tab metrik di Graph atau mode edit panel Singlestat. Anda masuk ke mode edit dengan memilih judul panel, lalu edit. 

 Editor kueri memiliki tautan **SQL yang dihasilkan** yang muncul setelah kueri dijalankan, saat dalam mode edit panel. Pilih itu, dan itu akan memperluas dan menampilkan string SQL interpolasi mentah yang dijalankan. 

### Pilih tabel, kolom waktu, dan kolom metrik (DARI)
<a name="postgresql-select-table-time-column-and-metric-column-from"></a>

 Saat Anda memasuki mode edit untuk pertama kalinya atau menambahkan kueri baru, Grafana akan mencoba mengisi ulang pembuat kueri dengan tabel pertama yang memiliki kolom stempel waktu dan kolom numerik. 

 Di bidang FROM, Grafana akan menyarankan tabel yang ada di `search_path` pengguna database. Untuk memilih tabel atau tampilan yang tidak ada di Anda, `search_path` Anda dapat memasukkan nama yang sepenuhnya memenuhi syarat (schema.table) secara manual seperti. `public.metrics` 

 Kolom kolom Waktu mengacu pada nama kolom yang memegang nilai waktu Anda. Memilih nilai untuk bidang kolom Metrik adalah opsional. Jika nilai dipilih, bidang kolom Metrik akan digunakan sebagai nama seri. 

 Saran kolom metrik hanya akan berisi kolom dengan tipe data teks (char, varchar, text). Untuk menggunakan kolom dengan tipe data yang berbeda sebagai kolom metrik, Anda dapat memasukkan nama kolom dengan pemeran:`ip::text`. Anda juga dapat memasukkan ekspresi SQL arbitrer di bidang kolom metrik yang mengevaluasi tipe data teks seperti. `hostname || ' ' || container_name` 

### Kolom, jendela, dan fungsi agregasi (SELECT)
<a name="columns-window-and-aggregation-functions-select"></a>

 Di `SELECT` baris, Anda dapat menentukan kolom dan fungsi apa yang ingin Anda gunakan. Di kolom kolom, Anda dapat menulis ekspresi arbitrer alih-alih nama kolom seperti`column1 * column2 / column3`. 

 Fungsi yang tersedia di editor kueri bergantung pada versi PostgreSQL yang Anda pilih saat mengonfigurasi sumber data. Jika Anda menggunakan fungsi agregat, Anda harus mengelompokkan set hasil Anda. Jika Anda menambahkan fungsi agregat, editor akan secara otomatis menambahkan file. `GROUP BY time` 

Editor mencoba menyederhanakan dan menyatukan bagian kueri ini. 

Anda dapat menambahkan kolom nilai lebih lanjut dengan memilih tombol plus dan memilih **Kolom** dari menu. Beberapa kolom nilai akan diplot sebagai seri terpisah di panel grafik. 

### Data penyaringan (WHERE)
<a name="postgresql-filter-data-where"></a>

 Untuk menambahkan filter, pilih ikon plus di sebelah kanan `WHERE` kondisi. Anda dapat menghapus filter dengan memilih filter dan memilih **Hapus**. Filter untuk rentang waktu yang dipilih saat ini secara otomatis ditambahkan ke kueri baru.

### Kelompokkan Oleh
<a name="postgresql-group-by"></a>

 Untuk mengelompokkan berdasarkan waktu atau kolom lainnya pilih ikon plus di akhir baris GROUP BY. Daftar tarik-turun saran hanya akan menampilkan kolom teks dari tabel yang Anda pilih saat ini tetapi Anda dapat memasukkan kolom apa pun secara manual. Anda dapat menghapus grup dengan memilih item dan kemudian memilih **Hapus**. 

 Jika Anda menambahkan pengelompokan apa pun, semua kolom yang dipilih harus memiliki fungsi agregat yang diterapkan. Pembuat kueri akan secara otomatis menambahkan fungsi agregat ke semua kolom tanpa fungsi agregat saat Anda menambahkan pengelompokan. 

#### Pengisian celah
<a name="postgresql-gap-filling"></a>

 Grafana yang Dikelola Amazon dapat mengisi nilai yang hilang saat Anda mengelompokkan berdasarkan waktu. Fungsi waktu menerima dua argumen. Argumen pertama adalah jendela waktu yang ingin Anda kelompokkan, dan argumen kedua adalah nilai yang Anda inginkan Grafana untuk mengisi item yang hilang. 

### Mode editor teks (RAW)
<a name="postgresql-text-editor-mode-raw"></a>

 Anda dapat beralih ke mode editor kueri mentah dengan memilih ikon hamburger dan memilih **mode Switch editor** atau dengan memilih **Edit SQL** di bawah kueri. 

**catatan**  
 Jika Anda menggunakan editor kueri mentah, pastikan kueri Anda setidaknya memiliki `ORDER BY time` dan filter pada rentang waktu yang dikembalikan. 

## Makro
<a name="postgresql-macros"></a>

 Makro dapat digunakan dalam kueri untuk menyederhanakan sintaks dan memungkinkan bagian dinamis. 


|  Contoh makro  |  Deskripsi  | 
| --- | --- | 
|  $\_\_time(dateColumn)  |  Akan diganti dengan ekspresi untuk mengkonversi ke stempel waktu UNIX dan mengganti nama kolom menjadi. time\_sec Misalnya, UNIX\_TIMESTAMP (DateColumn) sebagai time\_sec.  | 
|  $\_\_timeEpoch(dateColumn)  |  Akan diganti dengan ekspresi untuk mengkonversi ke stempel waktu UNIX dan mengganti nama kolom menjadi. time\_sec Misalnya, UNIX\_TIMESTAMP (DateColumn) sebagai time\_sec. | 
|  $\_\_timeFilter(dateColumn)  |  Akan diganti dengan filter rentang waktu menggunakan nama kolom yang ditentukan. Misalnya, DateColumn BETWEEN FROM\_UNIXTIME (1494410783) DAN FROM\_UNIXTIME (1494410983).  | 
|  $\_\_timeFrom()  |  Akan diganti dengan dimulainya pemilihan waktu yang sedang aktif. Misalnya, FROM\_UNIXTIME (1494410783). | 
|  $\_\_timeTo()  |  Akan diganti pada akhir pemilihan waktu yang sedang aktif. Misalnya, FROM\_UNIXTIME (1494410983).  | 
|  $\_\_timeGroup(dateColumn,'5m')  |  Akan diganti dengan ekspresi yang dapat digunakan dalam klausa GROUP BY. Misalnya, cast (cast (UNIX\_TIMESTAMP (DateColumn)/(300) sebagai ditandatangani) 300 sebagai ditandatangani), \*  | 
|  $\_\_timeGroup(dateColumn,'5m', 0)  |  Sama seperti baris preivious, tetapi dengan parameter fill sehingga titik yang hilang dalam seri itu akan ditambahkan oleh grafana dan 0 akan digunakan sebagai nilai.  | 
|  $\_\_timeGroup(dateColumn,'5m', NULL)  |  Sama seperti di atas tetapi NULL akan digunakan sebagai nilai untuk poin yang hilang.  | 
|  $\_\_timeGroup(dateColumn,'5m', previous)  |  Sama seperti di atas tetapi nilai sebelumnya dalam seri itu akan digunakan sebagai nilai isi jika tidak ada nilai yang terlihat namun NULL akan digunakan (hanya tersedia di Grafana 5.3\+).  | 
|  $\_\_timeGroupAlias(dateColumn,'5m')  |  Akan diganti identik dengan $\_\_TimeGroup tetapi dengan alias kolom tambahan  | 
|  $\_\_unixEpochFilter(dateColumn) |  Akan diganti dengan filter rentang waktu menggunakan nama kolom yang ditentukan dengan waktu yang direpresentasikan sebagai stempel waktu Unix. Misalnya, \*DateColumn > 1494410783 DAN DateColumn < 1494497183\* | 
| $\_\_unixEpochFrom()`  | \| Akan diganti dengan dimulainya pemilihan waktu yang sedang aktif sebagai stempel waktu Unix. Misalnya, \*1494410783\* | 
| $\_\_unixEpochTo() | Akan diganti dengan akhir pemilihan waktu aktif saat ini sebagai stempel waktu Unix. Misalnya, \*1494497183\* | 
| $\_\_unixEpochNanoFilter(dateColumn) | Akan diganti dengan filter rentang waktu menggunakan nama kolom yang ditentukan dengan waktu yang direpresentasikan sebagai stempel waktu nanodetik. Misalnya, \*DateColumn > 1494410783152415214 DAN DateColumn < 1494497183142514872\* | 
| $\_\_unixEpochNanoFrom() | Akan digantikan oleh dimulainya pemilihan waktu aktif saat ini sebagai stempel waktu nanodetik. Misalnya, \*1494410783152415214\* | 
| $\_\_unixEpochNanoTo() | Akan diganti pada akhir pemilihan waktu aktif saat ini sebagai stempel waktu nanodetik. Misalnya, \*1494497183142514872\* | 
| $\_\_unixEpochGroup(dateColumn,"5m", [fillmode]) | Sama seperti $\_\_TimeGroup tetapi untuk waktu yang disimpan sebagai stempel waktu Unix. | 

## Kueri tabel
<a name="postgresql-table-queries"></a>

 Jika opsi kueri diatur ke **Format sebagai Tabel**, pada dasarnya Anda dapat melakukan semua jenis kueri SQL. Panel tabel akan secara otomatis menampilkan hasil kolom dan baris apa pun yang dikembalikan kueri Anda. 

 Anda dapat mengontrol nama kolom panel Tabel dengan menggunakan sintaks pemilihan kolom `as` SQL biasa. 

## Pertanyaan deret waktu
<a name="postgresql-time-series-queries"></a>

 Jika Anda menetapkan **Format**`Time series`, untuk digunakan dalam panel grafik misalnya, kueri harus mengembalikan kolom bernama `time` yang mengembalikan datetime SQL atau tipe data numerik yang mewakili Unix epoch. Setiap kolom kecuali `time` dan `metric` diperlakukan sebagai kolom nilai. Anda dapat mengembalikan kolom bernama `metric` yang digunakan sebagai nama metrik untuk kolom nilai. Jika Anda mengembalikan beberapa kolom nilai dan kolom bernama`metric`, kolom ini digunakan sebagai awalan untuk nama seri. 

 Kumpulan hasil kueri deret waktu harus diurutkan berdasarkan waktu. 

 Kode contoh berikut menunjukkan `metric` kolom. 

```
SELECT
  $__timeGroup("time_date_time",'5m'),
  min("value_double"),
  'min' as metric
FROM test_data
WHERE $__timeFilter("time_date_time")
GROUP BY time
ORDER BY time
```

 Contoh kode folowing menunjukkan menggunakan parameter fill di makro $\_\_TimeGroup untuk mengonversi nilai null menjadi nol sebagai gantinya. 

```
SELECT
  $__timeGroup("createdAt",'5m',0),
  sum(value) as value,
  measurement
FROM test_data
WHERE
  $__timeFilter("createdAt")
GROUP BY time, measurement
ORDER BY time
```

 Kode contoh berikut menunjukkan beberapa kolom. 

```
SELECT
  $__timeGroup("time_date_time",'5m'),
  min("value_double") as "min_value",
  max("value_double") as "max_value"
FROM test_data
WHERE $__timeFilter("time_date_time")
GROUP BY time
ORDER BY time
```

## Templating
<a name="postgresql-templating"></a>

 Alih-alih hardcoding hal-hal seperti server, aplikasi dan nama sensor dalam kueri metrik Anda, Anda dapat menggunakan variabel di tempatnya. Variabel ditampilkan sebagai kotak pilih dropdown di bagian atas dasbor. Anda dapat menggunakan kotak dropdown ini untuk mengubah data yang ditampilkan di dasbor Anda. 

 Untuk informasi selengkapnya tentang variabel template dan template, lihat[Template](templates-and-variables.md#templates). 

### Variabel kueri
<a name="postgresql-query-variable"></a>

 Jika Anda menambahkan variabel template dari jenisnya`Query`, Anda dapat menulis kueri PostgreSQL yang dapat mengembalikan hal-hal seperti nama pengukuran, nama kunci, atau nilai kunci yang ditampilkan sebagai kotak pilih tarik-turun. 

 Misalnya, Anda dapat memiliki variabel yang berisi semua nilai untuk `hostname` kolom dalam tabel jika Anda menentukan kueri seperti ini dalam pengaturan *kueri* variabel template. 

```
SELECT hostname FROM host
```

 Kueri dapat mengembalikan beberapa kolom dan Grafana akan secara otomatis membuat daftar dari mereka. Misalnya, query berikut akan mengembalikan daftar dengan nilai-nilai dari `hostname` dan`hostname2`. 

```
SELECT host.hostname, other_host.hostname2 FROM host JOIN other_host ON host.city = other_host.city
```

 Untuk menggunakan makro yang bergantung pada rentang waktu seperti `$__timeFilter(column)` dalam kueri Anda, mode penyegaran variabel template harus disetel ke *On Time Range Change*. 

```
SELECT event_name FROM event_log WHERE $__timeFilter(time_column)
```

 Pilihan lain adalah kueri yang dapat membuat key/value variabel. Query harus mengembalikan dua kolom yang diberi nama `__text` dan`__value`. Nilai `__text` kolom harus unik (jika tidak unik, nilai pertama digunakan). Opsi dalam daftar dropdown akan memiliki teks dan nilai yang memungkinkan Anda memiliki nama ramah sebagai teks dan id sebagai nilainya. Contoh query dengan `hostname` sebagai teks dan `id` sebagai nilai: 

```
SELECT hostname AS __text, id AS __value FROM host
```

 Anda juga dapat membuat variabel bersarang. Menggunakan variabel bernama`region`, Anda bisa memiliki variabel host hanya menampilkan host dari wilayah yang dipilih saat ini. Contoh kode berikut menunjukkan kueri seperti ini (jika `region` adalah variabel multi-nilai, gunakan operator `IN` perbandingan daripada `=` untuk mencocokkan dengan beberapa nilai). 

```
SELECT hostname FROM host  WHERE region IN($region)
```

#### Menggunakan `__searchFilter` untuk memfilter hasil dalam Variabel Kueri
<a name="postgresql-using-__searchfilter-to-filter-results-in-query-variable"></a>

 Menggunakan `__searchFilter` di bidang kueri akan memfilter hasil kueri berdasarkan jenis pengguna di kotak pilih dropdown. Ketika tidak ada yang dimasukkan oleh pengguna, nilai default untuk `__searchFilter` adalah`%`. 

**catatan**  
 Penting bahwa Anda mengelilingi `__searchFilter` ekspresi dengan tanda kutip karena Grafana tidak melakukan ini untuk Anda. 

 Contoh berikut menunjukkan cara menggunakan `__searchFilter` sebagai bagian dari bidang query untuk mengaktifkan pencarian `hostname` sementara pengguna mengetik di kotak pilih dropdown. 

```
SELECT hostname FROM my_host  WHERE hostname LIKE '$__searchFilter'
```

### Menggunakan variabel dalam kueri
<a name="postgresql-using-variables-in-queries"></a>

 Nilai variabel template hanya dikutip ketika variabel template adalah`multi-value`. 

 Jika variabel adalah variabel multi-nilai, gunakan operator `IN` perbandingan daripada `=` untuk mencocokkan dengan beberapa nilai. 

 Ada dua sintaks: 

 `$<varname>`Contoh dengan variabel template bernama`hostname`: 

```
SELECT
  atimestamp as time,
  aint as value
FROM table
WHERE $__timeFilter(atimestamp) and hostname in($hostname)
ORDER BY atimestamp ASC
```

 `[[varname]]`Contoh dengan variabel template bernama`hostname`: 

```
SELECT
  atimestamp as time,
  aint as value
FROM table
WHERE $__timeFilter(atimestamp) and hostname in([[hostname]])
ORDER BY atimestamp ASC
```

#### Mematikan kutipan untuk variabel multi-nilai
<a name="postgresql-disabling-quoting-for-multi-value-variables"></a>

 Grafana yang Dikelola Amazon secara otomatis membuat string yang dikutip dan dipisahkan koma untuk variabel multi-nilai. Misalnya: jika `server01` dan `server02` dipilih maka akan diformat sebagai:`'server01', 'server02'`. Untuk menonaktifkan kutipan, gunakan opsi pemformatan csv untuk variabel. 

 `${servers:csv}` 

 Untuk informasi selengkapnya tentang opsi pemformatan variabel, lihat[Template dan variabel](templates-and-variables.md). 

## Anotasi
<a name="postgresql-annotations"></a>

 Gunakan anotasi untuk melapisi informasi peristiwa yang kaya di atas grafik. Anda menambahkan kueri anotasi melalui menu Dasbor/tampilan Anotasi. Untuk informasi selengkapnya, lihat [Anotasi](dashboard-annotations.md). 

 Contoh kode berikut menunjukkan query menggunakan kolom waktu dengan nilai-nilai epoch. 

```
SELECT
  epoch_time as time,
  metric1 as text,
  concat_ws(', ', metric1::text, metric2::text) as tags
FROM
  public.test_data
WHERE
  $__unixEpochFilter(epoch_time)
```

 Kode contoh berikut menunjukkan kueri wilayah menggunakan kolom waktu dan waktu akhir dengan nilai epoch. 

**catatan**  
 Ini hanya tersedia di Grafana v6.6\+. 

```
SELECT
  epoch_time as time,
  epoch_time_end as timeend,
  metric1 as text,
  concat_ws(', ', metric1::text, metric2::text) as tags
FROM
  public.test_data
WHERE
  $__unixEpochFilter(epoch_time)
```

 Contoh kode berikut menunjukkan query menggunakan kolom waktu tipe date/time data SQL asli. 

```
SELECT
  native_date_time as time,
  metric1 as text,
  concat_ws(', ', metric1::text, metric2::text) as tags
FROM
  public.test_data
WHERE
  $__timeFilter(native_date_time)
```


|  Nama  |  Deskripsi  | 
| --- | --- | 
|  time  |  Nama date/time lapangan. Bisa berupa kolom dengan tipe date/time data SQL asli atau nilai epoch.  | 
|  timeend  |  Nama opsional dari date/time bidang akhir. Bisa berupa kolom dengan tipe date/time data SQL asli atau nilai epoch (Grafana v6.6\+). | 
|  text  |  Bidang deskripsi acara.  | 
|  tags  |  Nama bidang opsional untuk digunakan untuk tag peristiwa sebagai string yang dipisahkan koma.  | 

## Peringatan
<a name="postgresql-alerting"></a>

 Kueri deret waktu harus berfungsi dalam kondisi peringatan. Kueri yang diformat tabel belum didukung dalam kondisi aturan peringatan. 