在数据库中存储数据库引用

时间:2013-02-05 12:42:03

标签: sql database linux postgresql debian

我希望能够在数据库而不是我的应用程序中使用单个值(即其名称)标记数据库,因为它始终是每个数据库一个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

1 个答案:

答案 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;

这似乎是一个更清洁的解决方案。