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
4

1 回答 1

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;

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

于 2013-02-05T12:59:41.373 回答