相关疑难解决方法(0)

如何在PostgreSQL查询中声明变量

如何声明变量以用于PostgreSQL 8.3查询?

在MS SQL Server中,我可以这样做:

DECLARE @myvar INT
SET @myvar = 5

SELECT *
FROM somewhere
WHERE something = @myvar
Run Code Online (Sandbox Code Playgroud)

我如何在PostgreSQL中做同样的事情?根据文档变量被简单地声明为"名称类型;",但这给了我一个语法错误:

myvar INTEGER;
Run Code Online (Sandbox Code Playgroud)

有人能给我一个正确语法的例子吗?

sql postgresql postgresql-8.3

205
推荐指数
13
解决办法
31万
查看次数

search_path如何影响标识符解析和"当前架构"

是否可以定义默认情况下创建新表的模式?(由"不合格的表名称"引用.)

我已经看到了在Postgres中使用"搜索路径"的一些细节,但我认为它只在检索数据时有效,而不是创建.

我有一堆SQL脚本,它们创建了许多表.我没有修改脚本,而是希望默认情况下在特定模式中设置数据库创建表 - 当它们具有非限定名称时.

这可能吗?

postgresql schema search-path database-table

46
推荐指数
2
解决办法
3万
查看次数

有没有办法在PostgreSQL查询中定义命名常量?

有没有办法在PostgreSQL查询中定义命名常量?例如:

MY_ID = 5;
SELECT * FROM users WHERE id = MY_ID;
Run Code Online (Sandbox Code Playgroud)

sql postgresql

41
推荐指数
5
解决办法
3万
查看次数

如何在触发器功能中使用变量设置?

我想在会话/事务中记录用户的id,使用SET,所以我以后可以在触发器函数中使用它来访问它current_setting.基本上,我正在尝试从之前发布非常相似的票证中选择n2 ,区别在于我正在使用PG 10.1.

我一直在尝试3种设置变量的方法:

  • SET local myvars.user_id = 4,从而在交易中在本地设置;
  • SET myvars.user_id = 4从而将其设置在会话中;
  • SELECT set_config('myvars.user_id', '4', false),取决于最后一个参数,将是前两个选项的快捷方式.

它们都不能在触发器中使用,触发器NULL在获取变量时接收current_setting.这是我设计的用于对其进行故障排除的脚本(可以很容易地与postgres docker镜像一起使用):

database=$POSTGRES_DB
user=$POSTGRES_USER
[ -z "$user" ] && user="postgres"

psql -v ON_ERROR_STOP=1 --username "$user" $database <<-EOSQL
    DROP TRIGGER IF EXISTS add_transition1 ON houses;
    CREATE TABLE IF NOT EXISTS houses (
        id SERIAL NOT NULL,
        name VARCHAR(80),
        created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT now(),
        PRIMARY KEY(id)
    );

    CREATE …
Run Code Online (Sandbox Code Playgroud)

postgresql global-variables plpgsql postgresql-triggers

12
推荐指数
3
解决办法
1905
查看次数

如何在pgAdmin中声明变量

如果我在psql终端,那么我可以声明并使用这样的变量:

\set message_id soifsdaofisd.gmail.com;
select * from emails where message_id = ':message_id';
Run Code Online (Sandbox Code Playgroud)

我怎么能在pgAdmin中这样做?

我在pgAdmin中尝试这个时出错:

错误:"CALAdkA4YC0"或其附近的语法错误第3行:设置message_id soifsdaofisd.gmail.com.

postgresql variables pgadmin psql

10
推荐指数
2
解决办法
2万
查看次数

PostgreSQL在函数外部循环.那可能吗?

我正在对PostgreSQL与SQLServer进行比较,以便进行迁移.现在我正在评估T-SQL与PL/pgSQL,事实是在T-SQL中你可以使用循环或声明变量,例如:

declare @counter int
set @counter = 0
while @counter < 10
begin
   set @counter = @counter + 1
   print 'The counter is ' + cast(@counter as char)
end
Run Code Online (Sandbox Code Playgroud)

没有必要将它放在函数或过程中.我可以在PostgreSQL中做到吗?

在网上搜索我在MySQL中找到了一个否定的答案,但我没有找到Postgres的答案.

t-sql postgresql loops function plpgsql

6
推荐指数
1
解决办法
7840
查看次数

PostgreSQL 设置会话变量

我的应用程序使用相同的凭据连接到 PostgreSQL 数据库(数据库提供商要求...)但是我需要识别哪个应用程序用户正在连接到数据库(例如用于更新审核等)

我想知道是否有任何方法可以设置一些变量(其生命仅限于会话),然后我可以通过 DDL 读取该变量。

** 编辑 **

我还做了一些实验,在连接字符串中使用 application_name 并放置简单的用户登录 - 但这不是最优雅的方式......

SET application_name TO 'user_login';
select current_setting('application_name');
Run Code Online (Sandbox Code Playgroud)

知道如何存档吗?

.net postgresql auditing npgsql

6
推荐指数
1
解决办法
2万
查看次数

如何使用Postgres查询窗口中的参数测试我的临时SQL

在Microsoft SQL Server中,要在查询窗口中测试类似的内容:

select * from Users where LastName = @lastname
Run Code Online (Sandbox Code Playgroud)

我可以在命令之前添加这个:

declare @lastname varchar(16)
set @lastname = 'Troy'
Run Code Online (Sandbox Code Playgroud)

但是在PostgreSQL中,我找不到类似的方法.似乎我唯一能做的就是直接用它的值替换参数名称.当ad-hoc查询变得复杂并且多次使用相同的参数时,它变得很难.有办法吗?

sql postgresql parameterized-query

5
推荐指数
2
解决办法
1930
查看次数

在'/'字符后获取字符串

我想在PostgreSQL SELECT查询中的字符'/'后提取字符串.

字段名称是source_path,表名是movies_history.

数据示例:

source_path的值:

  • 184738/file1.mov
  • 194839/file2.mov
  • 183940/file3.mxf
  • 118942/file4.mp4

等等.source_path的所有值都采用此格式

  • RANDOM_NUMBER/filename.xxx

我只需要获取'file.xxx'字符串.

regex sql postgresql pattern-matching

5
推荐指数
2
解决办法
3万
查看次数

为整个数据库创建常量字符串

我还是SQL的新手,所以我有一些小问题需要解决.我在Acqua Data Studio中运行Postgres数据库,其中一些查询遵循相同的模型.
这些查询中的一些变量是相同的,但将来可能会发生变化......

考虑到优化的数据库,更改常量的值比输入20多个查询并更改所有这些查询中的相同方面更快.

例:

SELECT *
FROM Table AS Default_Configs      
    LEFT JOIN Table AS Test_Configs
        ON Default_Configs.Column1 = 'BLABLABLA'
Run Code Online (Sandbox Code Playgroud)

想象'BLABLABLA'可能是'XXX',我怎么能让'BLABLABLA'成为遵循这种模式创建的每个View的常量?

sql postgresql constants

3
推荐指数
1
解决办法
2092
查看次数