Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在数据库中存储数据库引用_Sql_Database_Linux_Postgresql_Debian - Fatal编程技术网

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

Sql 在数据库中存储数据库引用,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, );

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

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,使其包含数据库的唯一标识符。