Имя: Пароль:
system
 
Подключение 1С к базе PostgreSQL: настройка и особенности
(1) Asmody
10 мая 2022 г.
10:02
Подключение 1С к PostgreSQL позволяет использовать современную СУБД для хранения данных вместо стандартного файлового формата.
(2) Александр111
10 мая 2022 г.
10:05
Сначала нужно убедиться, что установлен драйвер ODBC или нативный драйвер для PostgreSQL в вашей версии 1С.
(3) AlexKimp
10 мая 2022 г.
10:09
При настройке подключения важно правильно указать хост, порт, имя базы, пользователя и пароль. Любая ошибка приведет к 'красной ошибке'.
(4) Bigbro
10 мая 2022 г.
10:12
Если база большая, полезно настроить пул соединений и увеличить таймауты, иначе пользователи будут ждать ответа вечность.
(5) 1Снеговик
10 мая 2022 г.
10:16
Не забывайте про кодировку UTF-8 при создании базы. Иначе кириллица превратится в непонятные знаки.
(6) novichok79
10 мая 2022 г.
10:19
Некоторые функции 1С работают медленнее на PostgreSQL, поэтому стоит проверить критические запросы и добавить индексы.
(7) rabota_v8
10 мая 2022 г.
10:22
При переходе с файловой базы полезно сделать тестовый перенос данных, чтобы убедиться, что все справочники и документы корректно отобразились.
(8) orakool
10 мая 2022 г.
10:26
PostgreSQL поддерживает транзакции и контроль целостности, поэтому ошибки при сохранении данных не испортят базу.
Показать спойлер

-- =========================
DROP TABLE IF EXISTS consultations CASCADE;
DROP TABLE IF EXISTS complaints CASCADE;
DROP TABLE IF EXISTS prescriptions CASCADE;
DROP TABLE IF EXISTS medical_measurements CASCADE;
DROP TABLE IF EXISTS patient_diagnoses CASCADE;
DROP TABLE IF EXISTS patients CASCADE;
DROP TABLE IF EXISTS measurement_types CASCADE;
DROP TABLE IF EXISTS diagnosis_codes CASCADE;
DROP TABLE IF EXISTS doctors CASCADE;



-- =========================
-- 1. Справочники
-- =========================

-- Таблица врачей
CREATE TABLE doctors (
    id SERIAL PRIMARY KEY,               
    full_name TEXT NOT NULL,             
    specialization TEXT NOT NULL         
);

-- Справочник диагнозов (МКБ-10)
CREATE TABLE diagnosis_codes (
    id SERIAL PRIMARY KEY,               	
    icd10_code VARCHAR(10) UNIQUE NOT NULL, 
    name TEXT NOT NULL                   	
);

-- Справочник типов медицинских измерений
CREATE TABLE measurement_types (
    id SERIAL PRIMARY KEY,               
    name TEXT NOT NULL,                  
    unit TEXT NOT NULL,                  
    min_value NUMERIC,                   
    max_value NUMERIC                    
);

-- =========================
-- 2. Пациенты
-- =========================

-- Таблица пациентов
CREATE TABLE patients (
    id SERIAL PRIMARY KEY,               
    full_name TEXT NOT NULL,              
    birth_date DATE NOT NULL,             
    blood_type VARCHAR(3),                
    rh_factor CHAR(1) CHECK (rh_factor IN ('+', '-')),   
    phone TEXT,                           
    email TEXT                            
);

-- =========================
-- 3. Диагнозы пациентов
-- =========================

-- Таблица диагнозов пациентов
CREATE TABLE patient_diagnoses (
    id SERIAL PRIMARY KEY,               								
    patient_id INT NOT NULL REFERENCES patients(id) ON DELETE CASCADE, 
    diagnosis_id INT NOT NULL REFERENCES diagnosis_codes(id),          
    diagnosed_at DATE NOT NULL,           					
    doctor_id INT REFERENCES doctors(id)            		
);

-- =========================
-- 4. Медицинские измерения
-- =========================
-- Таблица медицинских измерений
-- Хранит значения показателей во времени (так называемые временные ряды, индекс для которых добавим ниже)
CREATE TABLE medical_measurements (
    id BIGSERIAL PRIMARY KEY,             								  
    patient_id INT NOT NULL REFERENCES patients(id) ON DELETE CASCADE,    
    measurement_type_id INT NOT NULL REFERENCES measurement_types(id),    
    value NUMERIC NOT NULL,               								  
    measured_at TIMESTAMP NOT NULL DEFAULT now(),						  

    CHECK (value >= 0)                    
);

-- Индекс для оптимизации запросов временных рядов
CREATE INDEX idx_measurements_patient_date
ON medical_measurements (patient_id, measured_at);

-- =========================
-- 5. Назначения
-- =========================

-- Таблица назначений лекарственных препаратов
CREATE TABLE prescriptions (
    id SERIAL PRIMARY KEY,               
    patient_id INT NOT NULL REFERENCES patients(id),  	
    doctor_id INT NOT NULL REFERENCES doctors(id), 		
    medication_name TEXT NOT NULL,        				
    dosage TEXT NOT NULL,                 				
    start_date DATE NOT NULL,             				
    end_date DATE                        				
);

-- =========================
-- 6. Жалобы пациентов
-- =========================

-- Таблица жалоб пациентов
CREATE TABLE complaints (
    id SERIAL PRIMARY KEY,               				
    patient_id INT NOT NULL REFERENCES patients(id),	
    description TEXT NOT NULL,            				
    created_at TIMESTAMP NOT NULL DEFAULT now()			
);

-- =========================
-- 7. Консультации
-- =========================
-- Таблица консультаций
-- Отражает факт визита пациента к врачу
CREATE TABLE consultations (
    id SERIAL PRIMARY KEY,               			 
    patient_id INT NOT NULL REFERENCES patients(id), 
    doctor_id INT NOT NULL REFERENCES doctors(id), 	 
    consultation_date TIMESTAMP NOT NULL,			 
    notes TEXT                          	 		 
);


(9) Чеширский
10 мая 2022 г.
10:29
Если пользователи привыкли к старой базе, переход на PostgreSQL иногда сопровождается криками 'где мои документы?!'.
(10) Baiji
10 мая 2022 г.
10:32
Идеальная интеграция — когда 1С работает с PostgreSQL, а пользователи ничего не замечают, кроме повышения скорости.
(11) timurhv
10 мая 2022 г.
10:35
После подключения стоит настроить резервное копирование и регулярные бэкапы, иначе одна ошибка может стоить всем нервов.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс
Для создания новых тем нужно войти или зарегистрироваться