LINUX.ORG.RU

78
Всего сообщений: 627

GUI для Postgresql?

Всем привет!

Подскажите, может, имеется ли в природе некий GUI, для подключения к существующей базе в Postgresql? Но не для администрирования, а для запросов в таблицу, возможностью в этом гуе создавать кнопки со своими запросами, и т.д.

Наверное, многого хочу?

 ,

Aborigen1020 ()

создание триггера на Update

Даны таблицы:

CREATE TABLE public.readership(
Idreader VARCHAR (255),
firstName VARCHAR ( 55 ) ,
lastName VARCHAR ( 55 ) ,
email VARCHAR ( 100 ) ,
address VARCHAR ( 100 ),
city VARCHAR ( 100 ) ,
state VARCHAR ( 100 ),
zipcode VARCHAR ( 100 ) ,
callNumber VARCHAR (100 ) ,
PRIMARY KEY (Idreader)
);


CREATE TABLE public.collection(
ItemBarcode VARCHAR (255),
title VARCHAR ( 255 ) ,
author VARCHAR ( 255 ) ,
ISBN VARCHAR ( 255 ) ,
publicationYear VARCHAR ( 255 ) ,
publisher VARCHAR ( 255 ) ,
itemCollection VARCHAR ( 255 ) ,
checkinDate VARCHAR (255),
PRIMARY KEY (ItemBarcode)
);

CREATE TABLE public.fund (
bibNum VARCHAR (255),
itemCount VARCHAR (255),
floatingItem BOOLEAN,
ItemBarcode VARCHAR (255),
PRIMARY KEY (bibNum),
FOREIGN KEY(ItemBarcode) REFERENCES collection(ItemBarcode)
);

CREATE TABLE public.orders(
IdOrders VARCHAR (255) ,
checkoutDateTime VARCHAR (255) ,
itemBarcode VARCHAR (255),
bibNum VARCHAR (255),
idReader VARCHAR (255),
PRIMARY KEY (IdOrders),
FOREIGN KEY(idReader) REFERENCES readership(idReader),
FOREIGN KEY(bibNum) REFERENCES fund(bibNum)

Я пытаюсь создать функцию и триггер, который будет обновлять атрибут timeorder с текущей датой, когда атрибут floatingItem обновляется. Функция, с которой я работаю, работает с одной проблемой. Он обновляет все записи, а не те, которые были обновлены. Проблема: при обновлении данных в floatingItem timeorder остается неизменным

ALTER TABLE public.orders ADD COLUMN timeorder timestamp without time zone;

CREATE FUNCTION web() RETURNS trigger AS
$$ 
BEGIN IF new.floatingItem = FALSE 
THEN 
UPDATE public.orders SET timeorder = current_timestamp WHERE
new.bubNum=orders.bibNum;
END IF; 
RETURN new;
END;
$$
LANGUAGE plpgsql VOLATILE; 

CREATE TRIGGER IF NOT EXISTS mytrigger AFTER UPDATE ON public.fund FOR EACH ROW EXECUTE PROCEDURE mytrigger ();

А как бы это сделали вы?

 , ,

moserp ()

Update с использованием рекурсивного запроса

Использую postgresql. Есть иерархическая таблица, поле с иерархией parent_id, нужно заполнить level - уровень вложенности, hier - строка с названиями родителями (исключая корень таблицы), root - значения корня иерархии (если у предка в поле new_root = true, то у потомков в поле root должен быть id этого предка). Пример можно посмотреть https://www.db-fiddle.com/f/ezdc4n5ivhHrHk6rDJgZUo/0

Посоветуйте, как можно улучшить запрос???

 , ,

polin11 ()

Семафор в postgresql

Положим если мы хотим отделить действия двух воркеров в SQL (работает либо один воркер либо другой), то мы можем использовать «mutex» - использовать транзакции и SELECT FOR UPDATE для взаимных блокировок на какой нибудь сторонней строке (положим воркеры с этой строкой не работают а используют ее только для синхронизации, для реализации «mutex»).

А что если мы хотим отделить действия двух групп воркеров в SQL (работает либо одна группа воркеров либо другая)? как бы вы изобрели «semaphore» для этого (любыми средствами SQL)?

Пока думаю в сторону SELECT FOR SHARE и SELECT FOR UPDATE на специальных строках для синхронизации групп воркеров, но до конца что-то пока не сложил 2 + 2. А как бы это сделали вы (именно средствами SQL)?

 ,

quester ()

Почему top показывает загрузку по CPU ниже, чем ее показывает гипервизор VMWare

Добрый день.

На сервере крутится PostgreSQL и сервер 1С.

Да, такую конфигурацию придумал не я, сейчас не об этом.

Если посмотреть вывод top, то мы видим среднюю загрузку CRU процентов 10-15. При 16 ядрах.

Если посмотреть загруженность по монитору гипервизора, окажется что загрузка машины критическая, и она отмечена восклицательным знаком.

Почему так происходит, кому верить?

 , , ,

Shulman ()

Перепил кофе

... и захотелось странного...

У нас тут есть PostgreSQL — 2 боевых сервера, на них же крутится Apache и серверы 1С.

В PostgreSQL есть такая досадная проблема, что восстановление БД по таймкоду производится для всего кластера.

На первых реализациях у нас все базы в одном кластере, их на одном серваке 200 и на другом 120.

Все это приходится рулить вручную, кое что конечно заскриптовано, но много рутины приходится делать по истории из командной строки.

Поскольку связка PoetgeSQL+Linux+Apache+1C хорошо у нас себя зарекомендовала, хочется иметь инструмент который позволяет одним мышевозюканием делать все операции.

Перечислю:

*Создание БД 1С из dt файла

*Создание БД PSQL из дампа с регистрацией на сервере 1С

*Создание копий по требованию (dt, dump)

*Восстановление копий, в том числе и на момент времени по WAL

*Управление кластерами PSQL

*Публикация на Web

*Разграничение прав доступа к этой системе

*Создание отчетов

*Web интерфейс

В общем может что-то такое есть?

В общем то наговорил уже на полгода работы.

 

Shulman ()

Возможно ли в один запрос...

Есть таблица с направлениями и телефонными кодами вида:

billing=> select * from directions where id = 1075;
  id  |            direction            | code | min_len | max_len | int_code 
------+---------------------------------+------+---------+---------+----------
 1075 | United Kingdom Special Services | 4450 |      12 |      12 |     4450
 1075 | United Kingdom Special Services | 448  |      12 |      12 |      448
 1075 | United Kingdom Special Services | 4455 |      12 |      12 |     4455
 1075 | United Kingdom Special Services | 449  |      12 |      12 |      449
 1075 | United Kingdom Special Services | 4456 |      12 |      12 |     4456
 1076 | United Kingdom Freephone | 44800 |      10 |      14 |    44800
 1076 | United Kingdom Freephone | 44808 |      10 |      14 |    44808


Задача: получить список вида «id - direction - code (все с этим id)»
Как бы distinct on direction, но он, естественно, оставляет только первый code.

Вопрос: возможно ли одним запросом?

 

annerleen ()

Восстановление базы из файлов

Здравствуйте, нас атаковали хакеры и стёрли все дампы бэкапов, но у меня остался бэкап в виде копии файлов самой папки postgres с битым файлом pg_control, если я пытаюсь подменить всю папку то postgres ругается на pg_control, мол он пустой. Помогите восстановить базу

Установлена PostgreSQL 11

 , ,

papajon ()

Кто-нибудь использует в производстве российскую сборку PostgresPro?

Чем он примечателен? Какой лучше использовать в производстве, ту которую ванильную или российскую? Вы сами каким пользуетесь?

 , ,

dimcoin ()

Не соединяется с postgre-sql базой данных

 

Set13 ()

снова ALTER, уже в postgres 10

Ребята, в PG10 есть способ из коробки делать ALTER? pglogic настраивал, вопрос - умеет ли без него? в гугле не нашёл ответа.

 ,

wadim_ ()

Годные альтернативы для MS SQL и Oracle RDBMS

Какие есть альтернативы базам данных MS SQL и Oracle?

На память приходит только PostgreSQL и MariaDB/MySQL.

Какие пригодны для использования в масштабах организаций с числом пользователей до 100-1000 человек (клики мышкой через веб-морду), и с объёмом базы порядка пары миллионов (миллиардов) записей (в основном, «жидкие» данные с кучей пустых колонок)?

Какие врапперы обычно используются, чтобы гибко переключаться между базами СУБД от разных производителей? То есть, есть ли понятие «горячей замены» для СУБД?

 ,

Mirage1_ ()

Умирают реплики postgres одновременно

в строго определённое время резко умирают потоковые реплики (10 штук) постгреса и никакие перезапуски не помогают. Началось это внезапно 2 дня назад, вроде ничего не делали с того времени. До этого всё было прекрасно. Запись напрямую в реплику не работает, проверяли (на тот случай, если вдруг какой-то процесс это делает)

ОС ubuntu 16.04, версия PG 9.5

2019-04-11 00:00:02.461 UTC [20140] LOG: invalid record length at 1B62/F21E54D8 2019-04-11 00:00:02.461 UTC [7142] FATAL: terminating walreceiver process due to administrator command 2019-04-11 00:00:02.463 UTC [20140] LOG: invalid record length at 1B62/F21E54D8 2019-04-11 00:00:02.463 UTC [20140] LOG: invalid record length at 1B62/F21E54D8

бах и всё. Пока не прибьёшь весь main и не накатишь в мастера - тогда работает дальше строго до 0 часов по UTC

Кто виноват и что делать?

 , ,

wadim_ ()

подобие юнит-тестов для postgresql

У меня есть скрипт, к-рый накатывает с помощью psql тестовую базу. Как добавить в него тесты? Пока что я делаю вот так:

-- tests
create or replace function test_privilege() returns text
language plpgsql strict as $$
begin
 if exists (select result from if_user_has_privilege(1,1) where result = true) THEN
   return 'failure';
 end if;
end;
$$;

select test_privilege()

Как сделать это более культурно, в стиле какого-нибудь тест-фреймворка? Моя задача - уменьшить количество писанины. Может быть, есть какая-то особая утилита, не psql?

 , ,

den73 ()

Проблемы с SELECT или кэшом

Добрый день. Есть компьютер (типо встроенная система) который выводит данные из нескольких таблиц на OLED дисплей по RS-232. Иногда компьютер перестает обновлять определенные значения считываемые из таблиц на дисплей. Но начинает снова обновлять их если подключить к нему смартфон в режиме модема или ноутбук (На компьютере есть веб-морда работающая с этой же базой и таблицами). Данные в базу постоянно пишутся другой программой, при выгрузке аномалий и столбняка значение нет, есть только на дисплей. За работу с дисплеем отвечает моя программа. Она опрашивает 4 таблицы и вывод данные, а так же текущее системное время. Данные в таблицах обновляются не чаще 1 раза в секунду. База требуется только для хранения и асинхронного доступа к данным.

Текущее значение из таблиц считываю так, аналогично запрашиваю данные и из других таблиц:

void read_base_sensor(char *name_table_sensor0){
        char buf1[255],buf2[255];
        conn = PQconnectdb(name_base);
        IF(PQstatus(conn)!=CONNECTION_OK){
            PQfinish(conn);
            exit(0);
        }
        else{
            sprintf(buf1,"SELECT id,time,press,temp FROM %s WHERE id=(SELECT max(id) FROM %s);", name_table_sensor0 ,name_table_sensor0);
            res = PQexec(conn, buf1);
            // выводим название столбцов
            nFields = PQnfields(res);
 
            int max_lines = PQntuples(res);
            IF(max_lines > 0){
 
            p = atof(PQgetvalue(res,max_lines-1,2));
            t = atof(PQgetvalue(res,max_lines-1,3));
 
            PQclear(res);
 
            IF(t < 0){t1 = 1; t2 = 4;}
            IF((t >= 0) && (t < 10)){t1 = 1; t2 = 5;}
            IF((t > 9) && (t < 100)){t1 = 2; t2 = 4;}
            IF(t > 99){t1 = 3; t2 = 3;}
            IF(p < 0){p1 = 1; p2 = 4;}
            IF((p >= 0) && (p < 10)){p1 = 1; p2 = 5;}
            IF((p > 9) && (p < 100)){p1 = 2; p2 = 4;}
            IF(p > 99){p1 = 3; p2 = 2;}
 
            sprintf(a_disp,"A:%*.*f\xDF\x43 %*.*fMPa;",t1,t2,t,p1,p2,p);
            }
        }
        PQfinish(conn);
    }
Этот код взят чуть не из примера по работе с БД. Есть подозрения что с залипаниями может быть как то связанно кэширование. Больше пока идей нет.

 , , ,

Timur1992 ()

Попытка собрать кластер pgsql + rep mgr

Всем привет! После того как собрал клатер pgsql на двух нодах, пытаюсь на слейве ручками сделать его мастером, но в ответ получаю:

[root@pgsql-clu-02 data]# sudo -u postgres /usr/pgsql-9.6/bin/repmgr -f /etc/repmgr/9.6/repmgr.conf standby switchover
NOTICE: executing switchover on node "pgsql-clu-02" (ID: 2)
ERROR: unable to determine whether demotion candidate is able to make replication connection to promotion candidate

Такое ощущение, что мастер не может достучаться до слейва, но сервера между собой доступны, подключение к субд между собой есть у каждой ноды. Не много инфы по самим нодам:

10.62.253.41 pgsql-clu-01
10.62.253.42 pgsql-clu-02

Конфигурация pgsql-clu-01

postgresql.conf https://pastebin.com/VvywYT9H
pg_hba.conf https://pastebin.com/KmxiEkx5
repmgr.conf https://pastebin.com/jahHfiWy

Конфигурация pgsql-clu-02

postgresql.conf https://pastebin.com/3Nhj2bxD
pg_hba.conf https://pastebin.com/Mdt5zMmb
repmgr.conf https://pastebin.com/8p9JRAs6

 

hatsnal ()

Какой формат QEMU не стоит использовать?

Ни разу не приходилось использовать KVM, но настал день икс. Родной формат смотрю там *.qcow2, но так же есть *.img. Гугл говорит разное. В общем требуется скорость работы, на виртуалке будет постгрес для 1с баз. Какой формат посоветуете...?

 ,

Shprot ()

Перезапуск postgresql

Всем привет. Расследую небольшой инцидент, выразившийся в незапуске postgresql после ребута сервера, вижу в логе:

Mar 26 06:49:07 mail postgres[1396]: [1-1] 2019-03-26 06:49:07.477 +04 [1396] СООБЩЕНИЕ:  завершение вывода в stderr
Mar 26 06:49:07 mail postgres[1396]: [1-2] 2019-03-26 06:49:07.477 +04 [1396] ПОДСКАЗКА:  В дальнейшем протокол будет выводиться в "syslog".
Mar 26 06:49:07 mail postgres[1616]: [2-1] 2019-03-26 06:49:07.538 +04 [1616] СООБЩЕНИЕ:  работа системы БД была прервана; последний момент работы: 2019-03-26 06:43:50 +04
Mar 26 06:49:07 mail postgres[1617]: [2-1] 2019-03-26 06:49:07.539 +04 [1617] [н/д]@[н/д] СООБЩЕНИЕ:  неполный стартовый пакет
Mar 26 06:49:12 mail postgres[1396]: [2-1] 2019-03-26 06:49:12.849 +04 [1396] СООБЩЕНИЕ:  получен запрос на "вежливое" выключение
Mar 26 06:49:22 mail postgres[1616]: [3-1] 2019-03-26 06:49:22.068 +04 [1616] СООБЩЕНИЕ:  система БД была остановлена нештатно; производится автоматическое восстановление
Mar 26 06:49:22 mail postgres[1616]: [4-1] 2019-03-26 06:49:22.254 +04 [1616] СООБЩЕНИЕ:  неверная длина записи по смещению 1/9BFE0AC0: ожидалось 24, получено 0
Mar 26 06:49:22 mail postgres[1616]: [5-1] 2019-03-26 06:49:22.254 +04 [1616] СООБЩЕНИЕ:  данные REDO не требуются
Mar 26 06:49:22 mail postgres[1616]: [6-1] 2019-03-26 06:49:22.858 +04 [1616] СООБЩЕНИЕ:  Защита от зацикливания мультитранзакций сейчас включена
Mar 26 06:49:22 mail postgres[2071]: [3-1] 2019-03-26 06:49:22.866 +04 [2071] СООБЩЕНИЕ:  выключение
Mar 26 06:49:23 mail postgres[1396]: [3-1] 2019-03-26 06:49:23.591 +04 [1396] СООБЩЕНИЕ:  система БД выключена

Как вижу, процесс запуска был почему то остановлен. Судя по всему, процесс был остановлен «вежливо» с помощью systemd. Открываю postgresql.service и вижу:

[Service]
Type=oneshot
ExecStart=/bin/true
ExecReload=/bin/true

Не вижу установленного параметра Timeout, который предлагается использовать на сайте postgrespro:

Особого внимания заслуживает значение тайм-аута. 
На момент написания этой документации по умолчанию в systemd принят тайм-аут 90 секунд, так что процесс, не сообщивший о своей готовности за это время, будет уничтожен. 
Но серверу PostgreSQL при запуске может потребоваться выполнить восстановление после сбоя, так что переход в состояние готовности может занять гораздо больше времени.
Предлагаемое значение 0 отключает логику тайм-аута.

Однако этот параметр не требуется, если тип сервиса установлен в oneshot :

Disabled by default, when service with Type=oneshot is used. 

По какой же причине systemd перезапустила сервис?

 ,

Aborigen1020 ()

можно поругать мою поделку - регистрация, аутентификация, сессии

 , , ,

den73 ()

pg_createcluster — история исчезновения

В общем решил это в толксы.

Вот был скрипт pg_createcluster, создавал кластеры для работы PostgreSQL.

Поставил 10, потом 11, пощупать... утилита эта не работает. Не знает о существовании чего то кроме того с чем поставлялась, а именно 9.6.

Или я не знаю как ее настроить, для работы с новыми версиями, или ее зачем то убрали.

pg_createcluster 9.6 <clustername> -d <dir>

Она создавала пустой кластер, скрипты запуска, настраивала куда складывать логи, помещала конфиги в /etc/postgres/<version>/<clustername> и возможно делала что то еще чем я пользовался не явно. А, еще скрипты для systemd генерила.

Растолкуйте, кто причастен? Пользуюсь PostgreSQL для 1С от Postgrespro.

 

Shulman ()