Платформа 3V/Соединение с источником/Подключение к БД PostgreSQL

Материал из 3v-wiki
Перейти к навигации Перейти к поиску
В платформе 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 }

пример конструктора внешней таблицы показателя.png

Теперь возможно создать показатель и добавить в качестве данных показателя данные внешней таблицы. Для этого необходимо открыть конструктор внутри показателя, выбрать соединение, указать название внешней таблицы и выбрать необходимый маппинг атрибутов для связи со справочником показателя и для значения факта. В нашем примере, связь будет по атрибуту current_release, а фактом для показателя будет атрибут num_organisms. факт бд rnc database.png