जो आपके मन में था, उसी तरह से सरल बनाएं:
DO
$do$
BEGIN
IF NOT EXISTS (
SELECT FROM pg_catalog.pg_roles -- SELECT list can be empty for this
WHERE rolname = 'my_user') THEN
CREATE ROLE my_user LOGIN PASSWORD 'my_password';
END IF;
END
$do$;
(@a_horse_with_no_name के उत्तर पर निर्माण और @ ग्रेगरी की टिप्पणी के साथ सुधार हुआ।)
इसके विपरीत, उदाहरण के लिए, CREATE TABLE
. के साथ कोई IF NOT EXISTS
. नहीं है CREATE ROLE
. के लिए खंड (कम से कम पीजी 12 तक)। और आप नहीं सादे SQL में डायनेमिक DDL स्टेटमेंट निष्पादित करें।
किसी अन्य पीएल का उपयोग करने के अलावा "पीएल/पीजीएसक्यूएल से बचने" का आपका अनुरोध असंभव है। DO
स्टेटमेंट डिफ़ॉल्ट प्रक्रियात्मक भाषा के रूप में plpgsql का उपयोग करता है। सिंटैक्स स्पष्ट घोषणा को छोड़ने की अनुमति देता है:
DO [ LANGUAGE
lang_name
] code
...lang_name
प्रक्रियात्मक भाषा का नाम जिसमें कोड लिखा गया है। यदि छोड़ दिया गया है, तो डिफ़ॉल्ट plpgsql
है ।