我的数据库架构中有几个类型列。
例如,有一个type_id
列,可以是主要,次要,工作或旧地址。
查询员工的所有旧地址将如下所示:
select a.*
from employees e
join employeeaddresses ea on ea.employee_id = e.employee_id
join addresses a on ea.adress_id = a.address_id
where ea.type_id = 4 -- old addresses
我想介绍一个内部映射到4的数据库范围常量TYPE_OLDADDRESS
。
所以查询看起来像这样:
select a.*
from employees e
join employeeaddresses ea on ea.employee_id = e.employee_id
join addresses a on ea.adress_id = a.address_id
where ea.type_id = TYPE_OLDADDRESS;
postgres能够做到这一点还是有解决方法?
答案 0 :(得分:2)
您可以设置/创建会话/角色/数据库范围的参数,例如:
set parameter.name to value; -- for the current session only
alter role rolename set parameter.name to value; -- for the specified role, relogin required
alter database dbname set parameter.name to value; -- for the specified database, relogin required
然后使用current_setting
函数获取它:
select current_setting('parameter.name');
该函数返回文本值,因此可能需要显式类型转换。
要从角色/数据库中删除参数定义,请使用reset
而不是set
关键字:
alter database dbname reset parameter.name;
自定义参数名称中的点是必需的。
答案 1 :(得分:1)
创建一个表格。
例如:
CREATE TABLE global_constants(
name char(20),
value int);
插入相应的值
insert into global_constants values('TYPE_OLDADDRESS',4);
然后你可以使用子查询:
select a.*
from employees e
join employeeaddresses ea on ea.employee_id = e.employee_id
join addresses a on ea.adress_id = a.address_id
where ea.type_id = (select value from global contantants where name = 'TYPE_OLDADDRESS');
您也可以使用UDF。这完全取决于您喜欢的语法。