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)
);
我读了这个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)
);