Гомойконичность и SQL
В настоящее время я использую emacs sql-mode в качестве оболочки sql, (упрощенный) ответ на запрос приведен ниже:
my_db=# select * from visit limit 4;
num | visit_key | created | expiry
----+-----------------------------+----------------------------+------------
1 | 0f6fb8603f4dfe026d88998d81a | 2008-03-02 15:17:56.899817 | 2008-03-02
2 | 7c389163ff611155f97af692426 | 2008-02-14 12:46:11.02434 | 2008-02-14
3 | 3ecba0cfb4e4e0fdd6a8be87b35 | 2008-02-14 16:33:34.797517 | 2008-02-14
4 | 89285112ef2d753bd6f5e51056f | 2008-02-21 14:37:47.368657 | 2008-02-21
(4 rows)
Если я хочу затем сформулировать другой запрос на основе этих данных, например,
my_db=# select visit_key, created from visit where expiry = '2008-03-02'
and num > 10;
Вы увидите, что я должен добавить запятую между visit_key
а также created
и окружите значение срока действия кавычками.
Существует ли оболочка SQL DB, которая показывает содержимое более однородно, чтобы я мог минимизировать такого рода редактирование? например
num, visit_key, created, expiry
(1, '0f6fb8603f4dfe026d88998d81a', '2008-03-02 15:17:56.899817', '2008-03-02')
или же
(num=1, visit_key='0f6fb8603f4dfe026d88998d81a',
created='2008-03-02 15:17:56.899817', expiry='2008-03-02')
Я использую Postgresql кстати.
2 ответа
Вот одна идея, которая похожа на то, что я делаю иногда, хотя я не уверен, что это именно то, что вы просите:
Запустите компилятор Lisp (например, SBCL) в SLIME. Затем загрузите CLSQL. Он имеет "Язык манипулирования функциональными данными" ( документация SELECT), который может помочь вам сделать что-то, что вы хотите, возможно, в сочетании с возможностями автозаполнения SLIME. Если нет, то легко определить функции и макросы Lisp (при условии, что вы знаете Lisp, но вы уже Emacser!).
Из коробки это не дает хорошо отформатированные таблицы, которые есть у большинства интерфейсов SQL, но даже это не так сложно добавить. И Лисп, безусловно, достаточно мощный, чтобы можно было легко найти способы облегчить ваши обычные операции.
Я обнаружил, что следующие изменения в psql дают мне гомоконичность:
=# select remote_ip, referer, http_method, time from hit limit 1;
remote_ip | referer | http_method | time
-----------------+---------+-------------+---------------------------
213.233.132.148 | | GET | 2013-08-27 08:01:42.38808
(1 row)
=# \a
Output format is unaligned.
=# \f ''', '''
Field separator is "', '".
=# \t
Showing only tuples.
=# select remote_ip, referer, http_method, time from hit limit 1;
213.233.132.148', '', 'GET', '2013-08-27 08:01:42.38808
предостережения: все является строкой, и в ней отсутствуют начальные и конечные кавычки.