相关疑难解决方法(0)

模拟CREATE DATABASE如果没有为PostgreSQL提供?

我想创建一个通过JDBC不存在的数据库.与MySQL不同,PostgreSQL不支持create if not exists语法.完成此任务的最佳方法是什么?

应用程序不知道数据库是否存在.它应该检查,如果数据库存在,应该使用它.因此,连接到所需数据库是有意义的,如果由于数据库不存在而导致连接失败,则应创建新数据库(通过连接到默认postgres数据库).我检查了Postgres返回的错误代码,但我找不到任何相同的相关代码.

实现此目的的另一种方法是连接到postgres数据库并检查是否存在所需的数据库并相应地采取措施.第二个是锻炼有点乏味.

有什么方法可以在Postgres中实现这个功能吗?

sql database postgresql ddl jdbc

92
推荐指数
7
解决办法
9万
查看次数

在 PL/pgSQL 匿名块中引用 psql 参数

我想PL/pgSQL通过psql命令行将参数传递给匿名块,然后在条件中检查该参数。

SQL 的相关部分在这里:

do $$
begin
    if (':para' = 1) then
        -- statements;
    end if;
end $$
;
Run Code Online (Sandbox Code Playgroud)

我这样称呼这个脚本:

psql -d dbname -v para=1 < script.sql
Run Code Online (Sandbox Code Playgroud)

我收到错误:

ERROR:  invalid input syntax for integer: ":para"
LINE 1: SELECT (':para' = 1)
            ^
QUERY:  SELECT (':para' = 1)
CONTEXT:  PL/pgSQL function inline_code_block line 3 at IF
Run Code Online (Sandbox Code Playgroud)

我尝试使用 case/when 范式,这也不起作用。

我猜psql参数与 PL/pgSQL 不兼容?最终,我的目标是,delete如果我1作为psql参数传递,则运行单个语句,如果传递0.

postgresql plpgsql psql

7
推荐指数
1
解决办法
2642
查看次数

从匿名块中的变量创建带有密码的用户

我想创建一个包含变量的脚本,_user并且当此类登录尚不存在时才_pass在 Postgres 数据库中创建用户。我以为这会起作用,但我不知道问题是什么:

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$
Run Code Online (Sandbox Code Playgroud)

如何强制用变量的内容替换变量?

$DO$还有和之间有什么区别$$

sql postgresql dynamic-sql plpgsql

4
推荐指数
1
解决办法
1959
查看次数

postgres 仅当用户不存在时才创建用户

我很少有 CREATE 用户作为 myquery.sql 文件的一部分,并且它也包含很少的其他查询

我的文件看起来像这样

CREATE USER myuser NOLOGIN;
GRANT CONNECT on DATABSE myDataBase to myuser;
GRANT USAGE ON SCHEAMA myschema to myuser;
Run Code Online (Sandbox Code Playgroud)

我在同一个文件中很少有这样的查询,由于某种原因,我需要向同一个文件添加新查询,当再次执行同一个文件时,我坚持错误用户已经存在,并且无法到达新添加的查询。

我还检查了 postgres 中没有 IF NOT EXISTS 类型的 CREATE USER 帮助。

那么如何添加检查以仅在不存在时创建用户。

sql postgresql

0
推荐指数
1
解决办法
8151
查看次数

标签 统计

postgresql ×4

sql ×3

plpgsql ×2

database ×1

ddl ×1

dynamic-sql ×1

jdbc ×1

psql ×1