Amazon Redshift tidak akan lagi mendukung penggunaan Python UDF setelah 30 Juni 2026. Kami akan mulai menegakkannya secara bertahap. Untuk informasi lebih lanjut tentang detail opsi akhir masa pakai dan migrasi Python, lihat posting blog
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Ikhtisar prosedur tersimpan di Amazon Redshift
Topik ini menjelaskan detail tentang tujuan dan penggunaan prosedur yang disimpan.
Prosedur tersimpan biasanya digunakan untuk merangkum logika untuk transformasi data, validasi data, dan logika khusus bisnis. Dengan menggabungkan beberapa langkah SQL ke dalam prosedur tersimpan, Anda dapat mengurangi perjalanan pulang pergi antara aplikasi Anda dan database.
Untuk kontrol akses halus, Anda dapat membuat prosedur tersimpan untuk melakukan fungsi tanpa memberikan akses pengguna ke tabel yang mendasarinya. Misalnya, hanya pemilik atau superuser yang dapat memotong tabel, dan pengguna memerlukan hak menulis untuk memasukkan data ke dalam tabel. Alih-alih memberikan hak istimewa pengguna pada tabel yang mendasarinya, Anda dapat membuat prosedur tersimpan yang melakukan tugas. Anda kemudian memberikan hak pengguna untuk menjalankan prosedur tersimpan.
Prosedur tersimpan dengan atribut keamanan DEFINER berjalan dengan hak istimewa pemilik prosedur tersimpan. Secara default, prosedur tersimpan memiliki keamanan INVOKER, yang berarti prosedur menggunakan hak istimewa pengguna yang memanggil prosedur.
Untuk membuat prosedur tersimpan, gunakan BUAT PROSEDUR perintah. Untuk menjalankan prosedur, gunakan PANGGILAN perintah. Contoh berikut nanti di bagian ini.
catatan
Beberapa klien mungkin menampilkan kesalahan berikut saat membuat prosedur tersimpan Amazon Redshift.
ERROR: 42601: [Amazon](500310) unterminated dollar-quoted string at or near "$$
Kesalahan ini terjadi karena ketidakmampuan klien untuk mengurai pernyataan CREATE PROCEDURE dengan benar dengan tanda titik koma yang membatasi pernyataan dan dengan kutipan tanda dolar ($). Ini menghasilkan hanya sebagian dari pernyataan yang dikirim ke server Amazon Redshift. Anda sering dapat mengatasi kesalahan ini dengan menggunakan Execute selected opsi Run as batch atau klien.
Misalnya, saat menggunakan klien Aginity, gunakan Run entire script as
batch opsi. Saat Anda menggunakan SQL Workbench/J, kami merekomendasikan versi 124. Saat Anda menggunakan SQL Workbench/J versi 125, pertimbangkan untuk menentukan pembatas alternatif sebagai solusi.
CREATE PROCEDURE berisi pernyataan SQL yang dibatasi dengan titik koma (;). Mendefinisikan pembatas alternatif seperti garis miring (/) dan menempatkannya di akhir pernyataan CREATE PROCEDURE mengirimkan pernyataan ke server Amazon Redshift untuk diproses. Berikut adalah contohnya.
CREATE OR REPLACE PROCEDURE test() AS $$ BEGIN SELECT 1 a; END; $$ LANGUAGE plpgsql ; /
Anda dapat menggunakan klien dengan dukungan untuk mengurai pernyataan CREATE PROCEDURE, seperti editor ku eri di konsol Amazon Redshift atau. TablePlus
Topik
Contoh berikut menunjukkan prosedur tanpa argumen output. Secara default, argumen adalah argumen input (IN).
CREATE OR REPLACE PROCEDURE test_sp1(f1 int, f2 varchar) AS $$ BEGIN RAISE INFO 'f1 = %, f2 = %', f1, f2; END; $$ LANGUAGE plpgsql; call test_sp1(5, 'abc'); INFO: f1 = 5, f2 = abc CALL
catatan
Saat Anda menulis prosedur tersimpan, kami merekomendasikan praktik terbaik untuk mengamankan nilai-nilai sensitif:
Jangan hardcode informasi sensitif apa pun dalam logika prosedur yang disimpan. Misalnya, jangan menetapkan kata sandi pengguna dalam pernyataan CREATE USER di badan prosedur yang disimpan. Ini menimbulkan risiko keamanan, karena nilai hardcode dapat dicatat sebagai metadata skema dalam tabel katalog. Sebagai gantinya, berikan nilai sensitif, seperti kata sandi, sebagai argumen ke prosedur yang disimpan, melalui parameter.
Untuk informasi lebih lanjut tentang prosedur yang disimpan, lihat BUAT PROSEDUR danMembuat prosedur tersimpan di Amazon Redshift. Untuk informasi selengkapnya tentang tabel katalog, lihatTabel katalog sistem.
Contoh berikut menunjukkan prosedur dengan argumen keluaran. Argumen adalah input (IN), input dan output (INOUT), dan output (OUT).
CREATE OR REPLACE PROCEDURE test_sp2(f1 IN int, f2 INOUT varchar(256), out_var OUT varchar(256)) AS $$ DECLARE loop_var int; BEGIN IF f1 is null OR f2 is null THEN RAISE EXCEPTION 'input cannot be null'; END IF; DROP TABLE if exists my_etl; CREATE TEMP TABLE my_etl(a int, b varchar); FOR loop_var IN 1..f1 LOOP insert into my_etl values (loop_var, f2); f2 := f2 || '+' || f2; END LOOP; SELECT INTO out_var count(*) from my_etl; END; $$ LANGUAGE plpgsql; call test_sp2(2,'2019'); f2 | column2 ---------------------+--------- 2019+2019+2019+2019 | 2 (1 row)