我有一个db表说,persons在Postgres中由另一个有列名称的团队传下来,"first_Name".现在我正在尝试使用PG指令器在此列名称上查询此表.
select * from persons where first_Name="xyz";
Run Code Online (Sandbox Code Playgroud)
它只是回归
错误:列"first_Name"不存在
不确定我是在做一些愚蠢的事情,还是我找不到这个问题的解决方法?
在Oracle数据库中,以下内容之间存在以下差异:
这些也可能是"当前用户"的相关值吗?
我特别感兴趣的是哪些可以更改,哪些可以更改它们,哪些不能更改值,哪些具有基于连接类型的不同值,以及哪些(始终)是用于登录到数据库.
在我的大多数测试中,值总是相同的.唯一的例外是运行以下内容以更改'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'),但我找不到有关此问题的文档.
我有一个简单的任务是将巨大的 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 ×2
dynamic-sql ×1
identifier ×1
oracle ×1
oracle10g ×1
oracle11g ×1
plpgsql ×1
plsql ×1
sql ×1
triggers ×1