Состоялся (https://www.postgresql.org/about/news/1704/) первый стабильный релиз новой серии многоплатформенного графического интерфейса для управления СУБД PostgreSQL - pgAdmin 4 1.0 (http://www.pgadmin.org/). Если pgAdmin III поставлялся в виде обособленного графического приложений, написанного на C++ с использованием wxWidgets, то четвёртая серия pgAdmin с нуля переписана на языках Python и Javascript/jQuery с задействованием отдельных runtime-компонентов для рабочего стола, написанных на C++ и Qt. Подобный подход позволил обеспечить возможность работы pgAdmin не только в форме локально выполняемого обособленного графического приложения, но и в виде работающего в браузере web-приложения, загружаемого с сервера.Стиль и организация интерфейса сохранены и воспринимаются скорее как расширение привычного интерфейса pgAdmin III с более современным дизайном и возможностью создания многопользовательских окружений. Приложение изначально построено в виде встраиваемого фреймворка, возможности которого могут быть расширены через подключение модулей, при помощи которых может быть обеспечена поддержка сторонних надстроек над PostgreSQL.
URL: https://www.postgresql.org/about/news/1704/
Новость: http://www.opennet.me/opennews/art.shtml?num=45260
>pgAdmin III...написанного на C++ с использованием wxWidgets, то четвёртая серия pgAdmin с нуля переписана на языках Python и Javascript/jQueryНу нихрена себе даунгрейд. Ну и хрен с ними: это всего лишь админка и особой производительности ей не нужно. На 4-ядерном 2ГГц процессоре сильно тормозить не будет и ладно...
>сильно тормозить не будетНе будет??? Все, что написано на веб фреймворках тормозит адово. Ну или требует сильно мощного железа. Эта упоротость тащить вебню в офлайн уже порядком достала.
>> Эта упоротостьКак и упоротость писать всю гуйню на сях: модули никто не пишет, самому хрен что поправить и развитие такое же - релиз раз в два года. Все таки инструменты должны соответствовать задачам.
Для такой хрени как модули есть всякие там эмбэдэд пайтоны да луа.А по поводу поправить - так нет никакой разницы какой сырей править - сишный или жабаскриптовый.
Прекрасно вас понимаю. Поскольку у большинства мнение такое же, на линуксе нету хороших _гуевых_ инструментов. Значит наверно и не нужны...
А зачем там более частые релизы?
А вот теперь ещё и Питон нужен, вот н...?
я еще по заголовку понял, что сейчас в новости про новую мажорную версию будет обязательно переход на новый фреймворк... но этого я предвидеть не мог...
Следующую версию напишут на джаве?
DbVisualizer - рекомендую :))))
Тормозить местами будет, но уход с С++ на таких технологии скорее всего связан с тем, что на них писать дешевле, в прямом смысле, оно стоит дешевле чем на С++ и разработчиков больше, что возможно позволит увеличить размер сообщества и как следствие увеличить функционал и качество продукта. Ну и дополнительных бонусом это работа через браузер, когда можно запустить на сервере и работать с админкой с любого устройства. Что бывает критично, когда на сервере что-то поломалось, а у тебя под рукой только смартфон.
Скорее всего это решение обосновано в первую очередь выживанием продукта, а только потом уже заботой о быстродействии, что при текущих мощностях рабочих станций не очень актуально для такого ПО.
С нетерпением ждём безпарольных открытых вебок пострега по всему интеннету! Ура!
P.s. Очень жаль, что от шустрой и удобной нативной версии отказались. Да, поддерживать ресурсозатратнее конечно ...
>Да, поддерживать ресурсозатратнее конечно ...Да, проще выкинуть и переписать.
phpPgAdmin есть же
Ну ежели буфер обмена станет от этого лучше, то пусть будет, я правда лениво на psql свалил
Согласен. САМОЕ бесячие, что бывает в разработке - невозможность скопировать из pgadmin в gvim. Приходится делать что-то вроде cat > file в терминале, копировать туда, потом это уже брать в виме... брр.
Не осилили клиент-сервер на c++, пустились во все тяжкие
Очевидно желающих писать это за спасибо не нашлось.
А делать мало кому нужное дерьмо на веб технологиях (извинте, что ругаюсь публично) за спасибо желающие нашлись? Собственно, на плюсах то pgadmin уже есть и ничего особенного изобретать не нужно было.
> Очевидно желающих писать это за спасибо не нашлось.Дописывать не нашлось, а переписывать нашлось -- всё верно понимаю?
Да - все верно.
Новый pgadmin унифицирован (web+desktop) и выглядит интырпрайзно. Очевидно что ориентирован на "крупных" пользователей. И ничего плохого в этом нет...
Третий был инструментом средней паршивости по юзабилити... И на с++ такие такого рода программы писать в принципе дороже (не говоря о том что новая версия - это два в одном..).[сообщение отредактировано модератором]
Как у вас удачно "крупных" выделено кавычками. После 2 миллионов набитых символов в старом добром pgAdmin III, констатирую: в этой новой г-но-поделке работать невозможно. Придется уйти на коммерческие GUI, когда придет время.Это просто бред, господа. Интерфейс глючит и в буквальном смысле "разваливается" на запчасти. Панели какие-то которые черти куда липнут. Нет поиска и замены. Убили многооконность. И это только первое что лезет в глаза и что было очень ценным в III.
Любой C++ GUI-программист знает, что если хочешь уткнуться в непробиваемый потолок - начни городить Web GUI. Эта лживая "простота" ни к чему хорошему не приведет. Надеюсь, четверка их научит уму разуму.
>> Очевидно желающих писать это за спасибо не нашлось.
> Дописывать не нашлось, а переписывать нашлось -- всё верно понимаю?скорей дело в багах wxWidgets - самое паршивое что "copy" по "Ctrl+C" через раз срабатывало :( , а select&paste совсем не работало.
Вся школота хочет писать, "творить!" и не дебажить, ни за собой, ни за другими.
> Очевидно желающих писать это за спасибо не нашлось.Весь FOSS держится на "спасибе". Только одним хватает ума проектировать грамотно (но нет времени делать это для FOSS), а другие просто сразу прыгают велосипедить после 10-дневных курсов "похапэха для суперпрограммистов".
> Весь FOSS держится на "спасибе". Только одним хватает ума проектировать грамотно
> (но нет времени делать это для FOSS)Это крайне примитивные представления -- см., скажем, http://www.dwheeler.com/oss_fs_why.html
вылетает на подключении к БД
'undefined' 'null' :)> NaN == NaN
false
Все объявленные переменные по умолчанию имеют тип (и значение) undefined, если при объявлении не было присвоено что-то иное.var hello;
hello; // => undefined
typeof hello; // => 'undefined'Оно и правильно, так как не понятно, как будет использоваться переменная дальше (какой ты предлагаешь тип в данном случае? number? а почему не string?) Любая функция также по умолчанию возвращает undefined, если результат функции не был присвоен явно через return.
function hello () {}
hello(); // => undefined
typeof hello(); // => 'undefined'Это тоже вполне логично, и даже изящно. Если в объекте обращаются к несуществующему ключу, результатом тоже будет undefined. И это тоже логично: не стоит кидаться исключениями по любому пустяку, а то придется писать бойлерплейт типа:
var myValue = myObject.hasKey('myKey') ? myObject.get('myKey') : 0;
// сравни с:
var myValue = myObject.myKey | 0;null - в отличие от undefined, null используется как что-то вполне себе определенное (defined). Обыкновенно используется, если нужно обозначить, что в переменной, в которой должен быть объект, прямо сейчас объекта нет:
var myObject = null; // объект зададим позже
typeof myObject; // => 'object' -- все правильно, так как myObject используется как ссылка на объект, хоть ссылка и пустая
myObject = { hello: 'world' };
typeof myObject; // => 'object'Теперь по поводу "NaN не равен NaN". Утверждение "NaN не равен NaN" звучит логично, как и "не-суслик не равен не-суслику". Очевидно, что первый не-суслик мог быть шкафом, а второй не-суслик -- инопланетным существом. Поэтому они и не равны. Было бы очень странно, если бы все-таки NaN был всегда равен NaN. Если же хочется проверить, является ли нечто наном -- делаешь isNaN(нечто).
Все твои претензии высосаны из пальца и теряют всякий смысл при более близком рассмотрении вопросов.
Генератор костылей прибежал
> Генератор костылей прибежалТы бы его послушал. Он как раз очень понятным и простым языком объясняет умные, хоть и тривиальные вещи, которые должны быть понятны даже школьнику.
>> Генератор костылей прибежал
> Ты бы его послушал. Он как раз очень понятным и простым языком
> объясняет умные, хоть и тривиальные вещи, которые должны быть понятны даже
> школьнику.Нам нужна работающая программа, а не понимание почему она глючит.
Иллюзия нормальности.
Null это и так "отсутствие значения" и городить undefined не нужно - лишщнее это."NaN не равен NaN" спорное утверждение. К примеру нам надо выяснить а "находятся ли переменные в одинаковом состоянии?" и простым сравнением не отделаешся, нужно городить хитрое выражение, реализующий отдельный тип эквивалентности.
NaN тоже лишнее - особое обозначение отсутствия значения, вполне можно обойтись null.
Скольский путь многозначной логики до добра не доводит, а порождает лишь путаницу.
> Null это и так "отсутствие значения"Ты правильно сделал, что взял в кавычки. Потому что подлинным отсутствием значения является, как подсказывает даже англо-русский словарь, undefined. Аналогия из доступного тебе мира:
1) Когда перед тобой белый лист бумаги -- это undefined. На этом листе теоретически может быть все, что угодно: рисунок, рассказ и т. д.
2) После того, как ты вывел на бумаге строчку "Номер и серия паспорта: ________" -- это null. То есть ссылка на другой документ (объект), который пока что никуда не указывает. Одновременно с этим уже исключается присутствие на листе рисунка или рассказа (в рамках данной аналогии), поэтому это уже не undefined.
3) Когда ты впишешь реальный номер и серию паспорта -- это уже будет заполненной ссылкой. Это теперь уже объект. (В JavaScript всегда работают со ссылками, а не с непосредственно объектами.)Отличаешь ли ты первую ситуацию от второй?
> нам надо выяснить а "находятся ли переменные в одинаковом состоянии?"
Ну так "одинаковое состояние" -- слишком размытое понятие, чтобы уложиться в простейший оператор сравнения. Будут ли обладать одинаковым состоянием строка "привет мир" и результат деления 0 на 0? Для кого-то да, а для кого-то и нет. Для кого-то еще одним требованием к "одинаковому состоянию" будет еще и то, чтобы обе переменные имели один и тот же тип: в нашем случае:
typeof "привет мир"; // => 'string'
typeof (0 / 0); // => 'number'isNaN("привет мир"); // => true -- потому что "привет мир" действительно не является числом :)
Number.isNaN("привет мир"); // => false -- потому что "привет мир" не имеет типа 'number'И как ты уместишь это в простейший оператор сравнения?
С кое чем не согласен.
> 1) Когда перед тобой белый лист бумаги -- это undefined.0) Когда перед вами пустой стол или пустота, это, выходит, тоже underfined?
Состояние 0 и состояния 1 неотличимы?
> 2) После того, как ты вывел на бумаге строчку "Номер и серия паспорта: ________" -- это nullДля этого отдельно null не нужен, это можно сделать, как я и делаю, что бы не путаться в типах, пустым объектом {}.
Итого мне кажется, что правильнее было бы
0) underfined, при этом это было бы запрещённое значение, которое выдавало бы ошибку при попытке чтения из не инициализированной переменной, как в PHP.
1) null переменная инициализирована и доступна для чтения.
2) {},0,'',/,false в переменную занесено пустое значение, при этом анализатору типов сообщается о том, какой тип этой переменной для более оптимального выделения памяти.
3) В переменную занесено значение.Не исключаю, что я что-то мог упустить и/или не понять.
Сказал бы скромненько что наличие и поведение NaN - результат следования IEEE 754 и не морочил бы голову. И в чём великое различие null и undefined, если и то, и другое - единственное значение в отдельном типе? Это не пропущенная графа для номера паспорта - потому что null не несёт относительно undefined никакой новой информации.А потом, не включая голову, пишут то, что выше - ну вот для
"var myValue = myObject.myKey | 0;" что будет, если значением была пустая строка? Правильно, она тихо-незаметно превратились в 0. Иногда годится, а иногда - и нет. А всё потому, что нет понимания разницы между отсутствием значения и его вычислением в false. А вот первая запись - громоздка (но это уже к разработчикам языка, можно и синтаксис сделать на подобные случаи), но корректна.
>Потому что подлинным отсутствием значения является, как подсказывает даже англо-русский словарь, undefineЯзык программирования имеет мало отношения к естественному языку.
>Отличаешь ли ты первую ситуацию от второй?
Аналогия сильно хромает. Есть пустые значения в широком смысле 0,"",{},[] и т.п. Аналогия с номером паспорта из этой же оперы.
undefined и null искуственное разделение отсутствия значения вследствии отсутсвия инициализации и явного определения отсутсвия значения. Типа, чтобы программист мог эти моменты различить, но никому это не нужно.>Ну так "одинаковое состояние" -- слишком размытое понятие, чтобы уложиться в простейший оператор сравнения
Это следствие многозначной логики в языке. Поэтому многозначная логика в ЯП - вредно.
>И как ты уместишь это в простейший оператор сравнения?
Решать подобные проблемы за счет введения NaN не очень умно со стороны создателей языке. Если есть сомнения - надо проверять операнды, а не результат 0/0
В PHP тоже своих костылей хватает, например ('1st' == 1) true, так как только для автоприведения типов PHP число приоритетнее строки, и PHP именно строку переводит в число при простом сравнении.
Вы скажете, так используй только строгое сравнение (===). Так это ещё костыльнее, так как данные из инпутов всегда приходят как строки, и при строгом сравнении не совпадут с проверкой на >== 0
А также функции определения позиций, которые при наличии совпадения возвращают целое натуральное число, включая 0, а при отсутствии совпадения с какого-то перепугу логическое false вместо логичного -1.
Ну и на кой ты сюда этого образцового урода приплёл? ЧТо PHP из костылей состоит примерно полностью и так все знают.
> Ну и на кой ты сюда этого образцового урода приплёл? ЧТо PHP
> из костылей состоит примерно полностью и так все знают.Приплёл его не я, а Аноним, которого я комментировал.
И как видите, не все.
> В PHP тоже своих костылей хватает, например ('1st' == 1) true, так...
>Приплёл его не я, а Аноним, которого я комментировал. И как видите, не все.При чем тут PHP? Прочитал свое сообщение еще раз, но не увидел и намека на PHP.
>Вы скажете, так используй только строгое сравнение (===). Так это ещё костыльнее, так как данные из инпутов всегда приходят как строки, и при строгом сравнении не совпадут с проверкой на >== 0Данные из инпутов предполагают что они должны быть определённого типа. А значит первым делом при чтении из инпутов их надо провалидировать и преобразовать в нужный тип, а потом уже отправлять дальше.
Просто при программировании нужно придерживаться правила что данные полученные из вне должны сразу же преобразовывать в предполагаемые типы, а потом с ними уже работать.
>Теперь по поводу "NaN не равен NaN".что-же тогда false != false например? не нужно оправдывать бред ok?
>>Теперь по поводу "NaN не равен NaN".
> что-же тогда false != false например? не нужно оправдывать бред ok?имеется ввиду что-ж раз "NaN не равен NaN" то нет такого что "false не равен false"?
>>Теперь по поводу "NaN не равен NaN".
> что-же тогда false != false например? не нужно оправдывать бред ok?Бред сивой кобылы и тупическую невнимательность демонстрируете сейчас Вы.
true и false это единственные и допустимые значения типа boolean. Элементарная булева алгебра, всё что не истина ложь, всё что не лож - истина. Из этого и ежу понятно, что false != false (true) (Один человек не женского пола того же пола, которого и другой человек не женского пола, потому что кроме женского и мужского полов у людей не существует.)NaN - это недопустимой числовой значение, сообщающее об ошибке. Оно может возникнуть и при делении на нуль, и при умножении на строку, и в куче других арифметических операциях.
По вашему 8/0 == 5*'jjj' должно выдавать истину?Другой вопрос, что NaN, как и underfined костыли JS, и по-хорошему их вообще быть не должно, и при попытках чтения из не инициализированных переменных, как и при ошибках арифметических операций интерпретатор должен останавливаться, сообщая об ошибке и не присваивать никаких ненужных спорных типов.
НО в JS решили так, и в рамках этого решения всё правильно и логично. NaN - это ошибка, и перед сравнением нужно проверять корректность данных, как и во всех нормальных ЯП, и оператор сравнение этим заниматься не должен.
что бы ты знал милок в pure С например есть FALSE и есть TRUE. С FALSE некую переменную сравнивать можно, а вот с TRUE глупо ибо может не совпасть ибо определено как 1 а по факту все что не FALSE. вообщем включай мозг и развивай кругозор а не оправдывай уродство JS
> что бы ты знал милок в pure С например есть FALSE и
> есть TRUE. С FALSE некую переменную сравнивать можно, а вот с
> TRUE глупо ибо может не совпасть ибо определено как 1 а
> по факту все что не FALSE. вообщем включай мозг и развивай
> кругозор а не оправдывай уродство JSЗачем приводить в пример "не удачное" решение?
> Из этого и ежу понятно, что false != false (true)По-моему, у ежа проблема с логикой.
>> Из этого и ежу понятно, что false != false (true)
> По-моему, у ежа проблема с логикой.Извиняюсь, запутался, конечно же, false == false (true).
ОК, теперь моему ежу тоже понятно.
>По вашему 8/0 == 5*'jjj' должно выдавать истину?Должна быть остановка выполнения скрипта с диагностикой
>var myObject = null;
>typeof myObject; // => 'object' -- все правильно, так как myObject используется как ссылка на объект, хоть ссылка и пустаяЭто ошибка дизайна которую пытались исправить, но не смогли потому что ломаются сайты при этом. http://wiki.ecmascript.org/doku.php?id=harmony:typeof_null
В html подобный переход решили за счет "квирк мода" и доктайпа с нужной версией
Приятный вид стал. Можно было и десктопную версию на пайтоне написать с qt
Python каким боком без WebSocket?JavaScript/Node.js/ES6? Ретрограды негодуют!!
За активное использование web-технологий проект получает однозначный незачёт.
Сейчас еще перепишут на электрон для декстопа!
Внезапно, это было бы гораздо лучше. Electron вполне годный фреймворк хоть и на JS.
> За активное использование web-технологий проект получает однозначный незачёт.Ты так и на PHPMyAdmin говоришь?
>> За активное использование web-технологий проект получает однозначный незачёт.
> Ты так и на PHPMyAdmin говоришь?Это какой-то проект, кардинально отличающийся от решета с названием phpMyAdmin?
Вот именно что нет, но уважаемой аудитории не нравится именно данный проект. Хотя по сути это всего лишь средство созданное для удобства людей не имеющих опыт работы в CLI
> от решета с названием phpMyAdmin?Не тупи. Даже в ядре линукса постоянно находят баги повышающие привилегии до рута.
Вопрос в том патчат ли эти баги.
>> от решета с названием phpMyAdmin?
> Не тупи. Даже в ядре линукса постоянно находят баги повышающие привилегии до
> рута.
> Вопрос в том патчат ли эти баги.И что даст доступ к руту, если дыры phpMyAdmin позволяют залезть в самое ценное на сервере - базу?
> Ты так и на PHPMyAdmin говоришь?Но ведь речь идёт не о my/pgAdmin-е, а о более серьёзной системе нацеленной на разработку, а не только на администрирование. Что-бы понять о чём я говорю посмотри на аналогичные софтины от M$/Oracle.
>> За активное использование web-технологий проект получает однозначный незачёт.
> Ты так и на PHPMyAdmin говоришь?Он не нужен.
pgcli наше все
А как там хотя бы 50 строчный запрос редактировать?
ВНЕЗАПНО! В любимом текстовом редакторе! И кто бы мог подумать?
языках …/jQuery
Да и само использование jquery в 2016м году - это смешно. Сейчас его исподьзуют только те, кто не умеет программировать на js, ну или если почему-то до сих пор нужна поддержка msie
Зачем вообще эти пхпадмины с уеб-интерфеэйсом? Если сервер не виден снаружи, то пробрасываем порт на сервер и подключаемся.
Чтоб подключаться с машин, на которых отсутствует установленный клиент и проблематично его поставить. Браузер есть везде.
JS не в каждом консольном браузере есть. Да и браузер не везде.
С такой логикой можно и для микроволновки написать админку - не у всех же есть с собой компьютер! А микроволновка - везде. :)Этот четвёртый клиент - опять шаг назад и таймбомба на самые дебильнейшие баги.
Этот проект делает тоже самое, правда без лишней зависимости от пайтона http://rickbergfalk.github.io/sqlpad/Postgres, MySQL, SQL Server, Crate, Vertica
Ну вместо питона там JS. Какая разница?
Если нужно десктопное приложение, то рекомендую посмотреть на dbeaver. Он на Java, кушает память хорошо, но на удивление приятная штука.
> dbeaver. Он на Java, кушает память хорошо, но на удивление приятная штука.Это вместо SQL-Workbench, что ли?
json редактор не сделали в нем?
> json редактор не сделали в нем?Ты ещё предложи картинки сохранённые в bytea показывать :-)
Будьте осторожнее с проверкой SSL сертификата сервера к которому подключаетесь.
Как это исправить: Failed to connect to the pgAdmin application server. Click here to try again.?
>"pgAdmin is designed to answer the needs of all users, from writing simple SQL >queries to developing complex databases."
> simple SQL queries
Сравнил по скорости работы pgAdmin III (1.22.1) и pgAdmin 4 (1.0) - 4ка тормозит,
не говоря уж о скорости запуска.
Характеристики ПК:
ЦП: AMD FX-8350 (8x4000MHz)
Память: 2x8Gb (DDR3 1600MHz)
Видео: NVIDIA GeForce GTX 970К окнам pgAdmin III привык. Начал располагать как удобно (он сохраняет позиции). Например слева у меня было основное окно, а справа остальные (окно запросов или таблиц).
И копировать данные у меня без проблем получалось.Для меня скорость работы очень важна.
А если мне нужно через браузер, то не плох Adminer (хоть и функционал слабоват для PostgreSQL).
> pgAdmin с нуля переписана на языках Python и Javascript/jQuery с задействованием
> отдельных runtime-компонентов для рабочего стола, написанных на C++ и Qt.- Пацанам 5+ за диверсию! Выкинуть все что работало, впихнуть 3 языка, 3 фреймворка...
Оракл должен выдать им грант, если еще не выдал.