2013-02-05 52 views
0

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

SOLR从哪里获取数据库名? – jgm

+0

它有一个名为dataimporthandler查询我的数据库,并将其导入索尔 – Jimmy

+0

它会查询数据库(名称)表 – Jimmy

回答

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; 

这似乎是一个更干净的解决方案。

+0

只是为了让我的头,这基本上是创建一个函数,我可以查询solrid,但我没有必须将其实际存储为数据库中的值,它会随时创建,但将ID添加到我的database_id TEXT – Jimmy

+0

solrid是一个函数。您传递一个整数ID,并通过预先设置数据库ID并将ID转换为文本来生成Solr样式的ID。您可以将此函数放入每个数据库中,更改database_id以使其包含数据库的唯一标识符。 – jgm

+0

天才,谢谢 – Jimmy