postgres:"BEGIN" 处或附近的语法错误

postgres: syntax error at or near "BEGIN"

我读了这个postCheck if table exists in SQL Server

并编写了这个脚本:

do $$
begin

IF (EXISTS (SELECT *
                 FROM INFORMATION_SCHEMA.TABLES
                 WHERE TABLE_SCHEMA = 'st'
                 AND  TABLE_NAME = 'config_change_log'))
BEGIN
   CREATE SCHEMA AUTHORIZATION st
   CREATE TABLE st.config_change_log
(
  id INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
  last_config_version varchar(255),
  is_done Boolean,
  chage_description varchar(255)
)

END

end
$$

然而当我运行:

psql -h localhost -d myDb -U myUser -f myScript.sql

我收到这个错误:

psql:myScript.sql:21: ERROR:  syntax error at or near "BEGIN"

IF 块看起来像这样:

IF <condition>
THEN
   <statements>
[ELSIF <condition>
THEN
   <statements>]
[ELSE
   <statements>]
END IF;

你要找的是这个吗?

DO $$
BEGIN

IF (NOT EXISTS (SELECT *
                 FROM INFORMATION_SCHEMA.TABLES
                 WHERE TABLE_SCHEMA = 'st'
                 AND  TABLE_NAME = 'config_change_log'))
THEN
    CREATE SCHEMA st;
    CREATE TABLE st.config_change_log
    (
        id serial NOT NULL PRIMARY KEY,
        last_config_version varchar(255),
        is_done Boolean,
        chage_description varchar(255)
    );
END IF;

END
$$

这在 Postgres 中要容易得多,不需要 IF:

CREATE SCHEMA IF NOT EXISTS st;
CREATE TABLE IF NOT EXISTS st.config_change_log
(
  id serial NOT NULL PRIMARY KEY,
  last_config_version varchar(255),
  is_done Boolean,
  chage_description varchar(255)
);