我希望能够在数据库而不是我的应用程序中使用单个值(即其名称)标记数据库,因为它始终是每个数据库一个ID。例如,像这样:
DATABASE_A.sql
-- Database Name Table
CREATE TABLE database (
name VARCHAR(10) NOT NULL UNIQUE,
);
CREATE TABLE item (
id SERIAL PRIMARY KEY,
name VARCHAR(10) NOT NULL UNIQUE,
);
Insert Into database (name) values ('A');
DATABASE_B.sql
-- Database Name Table
CREATE TABLE database (
name VARCHAR(10) NOT NULL UNIQUE,
);
CREATE TABLE item (
id SERIAL PRIMARY KEY,
name VARCHAR(10) NOT NULL UNIQUE,
);
Insert Into database (name) values ('B');
这是因为当它们被组合并存储在SOLR搜索服务器上时,它们的ID是它们的数据库名称和项目ID的组合,例如:
SOLR项目ID
A1
A2
A3
B1
是否可以使用单个表来定义前缀,这样当我从SQL网站查找到SOLR时,我可以执行以下查询:
database (name) + item (id) = SolrID
答案 0 :(得分:2)
我更倾向于在包含数据库ID的每个数据库中构建一个过程,例如:
CREATE OR REPLACE FUNCTION solrid(IN local_id INTEGER, OUT result TEXT) AS $$
DECLARE
database_id TEXT := 'A';
BEGIN
result := database_id || local_id::TEXT;
END;
$$ LANGUAGE PLPGSQL;
然后你可以编写你的选择语句,如:
SELECT solrid(id), name FROM item;
这似乎是一个更清洁的解决方案。