I want to create a script that will have variables of _user and _pass to create the user in the Postgres database only if such login does not exist yet. I was thinking this would work, but i cant tell what is the issue:
DO $DO$ DECLARE _user TEXT := 'myuser'; _pass TEXT := 'user!pass'; BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_catalog.pg_roles WHERE rolname = _user) THEN RAISE NOTICE 'Creating user % ...',_user; CREATE USER _user WITH LOGIN NOSUPERUSER CREATEDB CREATEROLE NOREPLICATION PASSWORD _pass; RAISE NOTICE 'Created user %',_user; ELSE RAISE NOTICE 'User % already exists, not creating it',_user; END IF; END $DO$ How do I enforce substitution of the variable with its content?
Also what is the difference between $DO$ and $$?
$DO$or$$or$lkdazlkfdj$, as long as you have a matching delimiter at the other end of the block: postgresql.org/docs/current/static/…