Sql 在数据库中存储数据库引用
我希望能够从数据库中而不是我的应用程序中使用单个值(即名称)标记数据库,因为每个数据库总是一个ID。例如,类似这样的内容: 数据库\u A.sqlSql 在数据库中存储数据库引用,sql,database,linux,postgresql,debian,Sql,Database,Linux,Postgresql,Debian,我希望能够从数据库中而不是我的应用程序中使用单个值(即名称)标记数据库,因为每个数据库总是一个ID。例如,类似这样的内容: 数据库\u 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, );
-- 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 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');
数据库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 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
我更倾向于在包含数据库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语句,如:
SELECT solrid(id), name FROM item;
这似乎是一个更干净的解决方案。SOLR从何处获取数据库名称?它有一个叫做dataimporthandler的东西,它查询我的数据库并将其导入solrIt将查询数据库(名称)表只是为了让我了解这一点,这基本上是在创建一个函数,我可以查询solrid,但是我不需要将它作为一个值存储在数据库中,它是动态创建的,但是将ID添加到我的数据库\u ID TEXTsolrid是一个函数。您向它传递一个整数ID,它通过在数据库ID前面加上前缀并将ID转换为文本来生成Solr样式的ID。您可以将此函数放在每个数据库中,更改数据库的id,使其包含数据库的唯一标识符。