相关疑难解决方法(0)

PostgreSQL列名称区分大小写吗?

我有一个db表说,persons在Postgres中由另一个有列名称的团队传下来,"first_Name".现在我正在尝试使用PG指令器在此列名称上查询此表.

select * from persons where first_Name="xyz";
Run Code Online (Sandbox Code Playgroud)

它只是回归

错误:列"first_Name"不存在

不确定我是在做一些愚蠢的事情,还是我找不到这个问题的解决方法?

sql postgresql case-sensitive case-insensitive identifier

138
推荐指数
3
解决办法
9万
查看次数

USER()和SYS_CONTEXT('USERENV','CURRENT_USER')有什么区别?

在Oracle数据库中,以下内容之间存在以下差异:

  • 用户()
  • sys_context('USERENV','CURRENT_USER')
  • sys_context('USERENV','SESSION_USER')

这些也可能是"当前用户"的相关值吗?

  • sys_context('USERENV','CURRENT_SCHEMA')
  • sys_context('USERENV','AUTHENTICATED_IDENTITY')

我特别感兴趣的是哪些可以更改,哪些可以更改它们,哪些不能更改值,哪些具有基于连接类型的不同值,以及哪些(始终)是用于登录到数据库.

在我的大多数测试中,值总是相同的.唯一的例外是运行以下内容以更改'CURRENT_SCHEMA'时:

alter session set current_schema=<SCHEMA>
Run Code Online (Sandbox Code Playgroud)

执行以下操作会导致错误:

alter session set current_user=<USER> --even as sys/system, which is good I suppose
Run Code Online (Sandbox Code Playgroud)

因此,所有这些都有某种安全/规则.但是,拥有SESSION_USER和CURRENT_USER背后一定有一些原因.我还假设user()可以是sys_context的快捷方式('USERENV','CURRENT_USER'),但我找不到有关此问题的文档.

oracle plsql oracle10g oracle11g

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

如何在触发器函数中将 NEW.* 传递给 EXECUTE

我有一个简单的任务是将巨大的 MD5 值插入到表(分区表)中,并创建了一个触发器和一个触发器函数来代替INSERT操作。在函数中,我检查了前两个字符NEW.md5以确定应插入哪个表。

DECLARE
  tb text;
BEGIN
  IF TG_OP = 'INSERT' THEN
    tb = 'samples_' || left(NEW.md5, 2);
    EXECUTE(format('INSERT INTO %s VALUES (%s);', tb, NEW.*)); <- WRONG
  END IF;
  RETURN NULL;
END;
Run Code Online (Sandbox Code Playgroud)

问题是如何连接NEW.*到SQL语句中?

postgresql triggers dynamic-sql plpgsql

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