Платформа 3V/Соединение с источником/Подключение к БД PostgreSQL
В платформе 3v возможно подключаться к внешним бд PostgreSQL, через создания объекта репозитория Соединение, настройки его через json и использование его внутри справочников платформы. Для подключения к внешним бд PostgreSQL возможно настроить соединение следующего вида:
1 {
2 "dbType": "PostgreSQL",
3 "connectionString": "Server=my_db_adress;Port=5432;User Id=postgres;Password=postgres;Database=test;Search Path=public;Timeout=120;",
4 "id": 70000,
5 "name": "Соединение с БД PostgreSQL"
6 }
Структура схемы соединения типа "Link"
Ключ | Значение или описание значения |
---|---|
dbType | PostgreSQL |
"connectionString" | строки подключения к внешней бд PostgreSQL, где Server - адрес бд, Port - номер порта для подключения (дополнительно необходимо проверить открыттие порта для подключения со стороны бд), User Id - id пользователя бд, Password - пароль, Database - название бд на сервере, Search Path - путь для поиска схем, по умолчанию обычно указывается = Public, Timeout=120 (таймаут выполнения запроса для соединения) |
id | id объекта подключения в репозитории платформы |
name | наименование подключения |
Пример подключения к внешней БД PostgreSQL
В дальнейшем можно использовать данное соединение на чтение внутри структуры обычных справочников, например создадим подключение к тестовой бд, посвященной исследованиям РНК https://rnacentral.org/help/public-database и попробуем добавить данные из одной ее таблицы в справочник на платформу. Соединение: https://study.3v-cloud.com/navigator/#/home?objectId=852
1 {
2 "dbType": "PostgreSQL",
3 "connectionString": "Server=hh-pgsql-public.ebi.ac.uk;Port=5432;User Id=reader;Password=NWDMCE5xdipIjRrp;Database=pfmegrnargs;Search Path=rnacen;Timeout=120;",
4 "id": 852,
5 "name": "hh-pgsql-public.ebi.ac.uk"
6 }
Справочник: https://study.3v-cloud.com/navigator/#/home?objectId=853, в который добавим пару атрибутов из бд и укажем, что он внешний.
Мы создали структуру справочника, и добавили через json данные об атрибутах внешней таблицы бд, не забыв прописать "isDataSourceExternal": true (отмечая справочник внешним источником) и "limit": 100 для ограничения числа данных.
Пример структуры:
1 {
2 "disableCache": false,
3 "cacheSettings": {
4 "expirationMinutes": null
5 },
6 "discriminator": "TableDictionary",
7 "dictionaryStructure": {
8 "id": 853,
9 "name": "Новый справочник",
10 "code": "New_Dictionary_2339",
11 "description": null,
12 "type": "TableDictionary",
13 "tableName": "qa_status",
14 "sequenceName": "",
15 "databaseId": 852,
16 "attributes": [
17 {
18 "id": 1,
19 "name": "Идентификатор",
20 "code": "taxid",
21 "description": "",
22 "dataType": "Integer",
23 "type": "Id",
24 "isNullable": false,
25 "hasMultipleValues": false,
26 "isVisible": false,
27 "isReadOnly": true,
28 "tableName": "",
29 "identIndex": {
30 "code": null,
31 "isUnique": false,
32 "dbIndexName": null,
33 "fields": [],
34 "isNew": true
35 },
36 "referenceIndex": {
37 "code": null,
38 "isUnique": false,
39 "dbIndexName": null,
40 "fields": [],
41 "isNew": true
42 },
43 "defaultValue": -1,
44 "defaultValueExpression": null,
45 "component": null,
46 "parentAttributeId": null,
47 "locale": null
48 },
49 {
50 "id": 31,
51 "name": "upi",
52 "code": "upi",
53 "description": "",
54 "dataType": "String",
55 "type": "Custom",
56 "isNullable": true,
57 "hasMultipleValues": false,
58 "isVisible": false,
59 "isReadOnly": true,
60 "tableName": "",
61 "identIndex": {
62 "code": null,
63 "isUnique": false,
64 "dbIndexName": null,
65 "fields": [],
66 "isNew": true
67 },
68 "referenceIndex": {
69 "code": null,
70 "isUnique": false,
71 "dbIndexName": null,
72 "fields": [],
73 "isNew": true
74 },
75 "defaultValue": -1,
76 "defaultValueExpression": null,
77 "component": null,
78 "parentAttributeId": null,
79 "locale": null
80 }
81 ],
82 "indexes": [
83 {
84 "code": "primary_key",
85 "isUnique": true,
86 "dbIndexName": null,
87 "fields": [
88 "ID"
89 ],
90 "isNew": true
91 }
92 ]
93 },
94 "id": 853,
95 "name": "Новый справочник",
96 "code": "New_Dictionary_2339",
97 "description": null,
98 "dictionaryType": "TableDictionary",
99 "tableName": "qa_status",
100 "isHistoryEnabled": false,
101 "databaseId": 852,
102 "isAccessRightsEnabled": false,
103 "viewOptions": {
104 "limit": 100,
105 "filteringAttributes": [],
106 "filtersJoin": "And",
107 "disableRefreshWhenParameterChanged": false,
108 "gridComponent": null
109 },
110 "isDataSourceExternal": true,
111 "isNotifyEnable": false
112 }
Создание показателя с данными внешней таблицы БД PostgreSQL
Создадим справочник rnc_database, куда добавим атрибуты id, descr, current_release из rnc_database из соединения https://study.3v-cloud.com/navigator/#/home?objectId=852
1 {
2 "disableCache": false,
3 "cacheSettings": {
4 "expirationMinutes": null
5 },
6 "discriminator": "TableDictionary",
7 "dictionaryStructure": {
8 "id": 855,
9 "name": "Пример таблицы из бд hh-pgsql-public.ebi.ac.uk_копия",
10 "code": "New_Dictionary_2339_copy",
11 "description": null,
12 "type": "TableDictionary",
13 "tableName": "rnc_database",
14 "sequenceName": "",
15 "databaseId": 852,
16 "attributes": [
17 {
18 "id": 1,
19 "name": "Идентификатор",
20 "code": "id",
21 "description": "",
22 "dataType": "Integer",
23 "type": "Id",
24 "isNullable": false,
25 "hasMultipleValues": false,
26 "isVisible": false,
27 "isReadOnly": true,
28 "tableName": "",
29 "identIndex": {
30 "code": null,
31 "isUnique": false,
32 "dbIndexName": null,
33 "fields": [],
34 "isNew": true
35 },
36 "referenceIndex": {
37 "code": null,
38 "isUnique": false,
39 "dbIndexName": null,
40 "fields": [],
41 "isNew": true
42 },
43 "defaultValue": -1,
44 "defaultValueExpression": null,
45 "component": null,
46 "parentAttributeId": null,
47 "locale": null
48 },
49 {
50 "id": 31,
51 "name": "descr",
52 "code": "descr",
53 "description": "",
54 "dataType": "String",
55 "type": "Custom",
56 "isNullable": true,
57 "hasMultipleValues": false,
58 "isVisible": false,
59 "isReadOnly": true,
60 "tableName": "",
61 "identIndex": {
62 "code": null,
63 "isUnique": false,
64 "dbIndexName": null,
65 "fields": [],
66 "isNew": true
67 },
68 "referenceIndex": {
69 "code": null,
70 "isUnique": false,
71 "dbIndexName": null,
72 "fields": [],
73 "isNew": true
74 },
75 "defaultValue": -1,
76 "defaultValueExpression": null,
77 "component": null,
78 "parentAttributeId": null,
79 "locale": null
80 },
81 {
82 "id": 32,
83 "name": "current_release",
84 "code": "current_release",
85 "description": "",
86 "dataType": "Integer",
87 "type": "Custom",
88 "isNullable": true,
89 "hasMultipleValues": false,
90 "isVisible": false,
91 "isReadOnly": true,
92 "tableName": "",
93 "identIndex": {
94 "code": null,
95 "isUnique": false,
96 "dbIndexName": null,
97 "fields": [],
98 "isNew": true
99 },
100 "referenceIndex": {
101 "code": null,
102 "isUnique": false,
103 "dbIndexName": null,
104 "fields": [],
105 "isNew": true
106 },
107 "defaultValue": -1,
108 "defaultValueExpression": null,
109 "component": null,
110 "parentAttributeId": null,
111 "locale": null
112 }
113 ],
114 "indexes": [
115 {
116 "code": "primary_key",
117 "isUnique": true,
118 "dbIndexName": null,
119 "fields": [
120 "ID"
121 ],
122 "isNew": true
123 }
124 ]
125 },
126 "id": 855,
127 "name": "Пример таблицы из бд hh-pgsql-public.ebi.ac.uk_копия",
128 "code": "New_Dictionary_2339_copy",
129 "description": null,
130 "dictionaryType": "TableDictionary",
131 "tableName": "rnc_database",
132 "isHistoryEnabled": false,
133 "databaseId": 852,
134 "isAccessRightsEnabled": false,
135 "viewOptions": {
136 "limit": 100,
137 "filteringAttributes": [],
138 "filtersJoin": "And",
139 "disableRefreshWhenParameterChanged": false,
140 "gridComponent": null
141 },
142 "isDataSourceExternal": true,
143 "isNotifyEnable": false
144 }
Теперь возможно создать показатель и добавить в качестве данных показателя данные внешней таблицы. Для этого необходимо открыть конструктор внутри показателя, выбрать соединение, указать название внешней таблицы и выбрать необходимый маппинг атрибутов для связи со справочником показателя и для значения факта. В нашем примере, связь будет по атрибуту current_release, а фактом для показателя будет атрибут num_organisms.