Showing posts with label psql. Show all posts
Showing posts with label psql. Show all posts

July 22, 2010

В ожидании 9.1 - \conninfo в psql

Перевод Waiting for 9.1 – \conninfo in psql с select * from depesz;


20 июля Robert Haas применил патч, добавляющий ещё одну \* комманду в psql:

Добавляет команду \conninfo в psql, показывающую информацию о текущем соединении.

David Christensen. Проверено Steve Singer. Некоторые изменения от меня.


Из сообщения всё предельно понятно, т.ч. просто посмотрим на это:

March 9, 2010

Настраиваем Emacs для работы с PostgreSQL

Да-да, в Emacs всё уже давно есть. Просто делаем M-x sql-postgres, он спрашивает базу+пользователя+хост, вводим пароль и получаем буфер-терминал *SQL*, где видим всем известный инструмент psql для работы с PostgreSQL.

Но, если получаем длинный вывод, то наблюдаем артефакты от less или more (или что у вас там по умолчанию в качестве пейджера). К тому же, если работаем напрямую из окна в sql-mode (что очень удобно, см. M-x describe-function RET sql-set-sqli-buffer RET), то наблюдаем эффект с множественными повторениями подсказки (prompt).

Как это пофиксить? Идея в том, чтобы отключить PAGER (программу, через которую psql пропускает свой вывод), и "подтюнить" подсказку (prompt) средствами самого psql с помощью переменной sql-postgres-options, предоставляемой sql-mode.

Создаём файл с настройками для PostgreSQL.

~/.emacs.d/postgresql.el:
;; In psql turn off pager usage and adjust prompts
(setq sql-postgres-options '("-P" "pager=off"
"-v" "PROMPT1=%n@%m:%> %~%R%#\n"
"-v" "PROMPT2="
"-v" "PROMPT3="))



Далее добавляем подгрузку этих настроек в .emacs и всё.

~/.emacs:
(load "~/.emacs.d/postgresql.el")

March 2, 2010

Скрипты psql, занятно и полезно

Перевод Scripting psql for Fun and Profit с David Fetter's blog

Вы можете определённо многое терять не применяя разные полезные возможности. psql принимает большое количество опций коммандной строки. Одна из супер полезных опций это -v, которую можно использовать как эквивалент \set. Например:

psql -1 -v ON_ERROR_STOP=1 -f script.psql

останавливает скрипт на первой ошибке и делает rollback вместо заполнения экрана горой связанных с первой ошибок от дальнейшего содержимого скрипта.

September 8, 2008

Аналог \dT в SQL (mustread!!!)

Очень полезная вещь, я считаю...

Перевод SQL equivalent to \dT с pgsql-general

Bram Kuijper для pgsql-general

Всем привет,

Если я хочу получить список типов (т.е., типов данных или перечислений), то я могу выпонить комманду '\dT' в клиенте PostgreSQL.

Однако, я, похоже, не могу выяснить альтернативу \dT комманды в SQL, т.е. как бы я мог получить список типов с помошью SQL скрипта.

Напимер, если я создаю свой собственный ENUM:
CREATE TYPE bird AS ENUM('duck','goose');
то, быстро просмотрев information schema не просто обнаружить где храниться это перечисление. Является ли information schema правильным местом для поиска? Какое SQL выражение мне нужно для получения определённых пользователем типов?

заранее спасибо,
Bram Kuijper

Pavel Stehule для Bram, pgsql-general

Привет

Bram Kuijper:
> Всем привет,
>
> Если я хочу получить список типов (т.е., типов данных или перечислений),
> то я могу выпонить комманду '\dT' в клиенте PostgreSQL.
>

запустите psql с -E параметром. И увидите все SQL запросы используемые для метакомманд.
[pavel@localhost ~]$ psql -E postgres
psql (8.4devel)
Type "help" for help.

postgres=# \dT
********* QUERY **********
SELECT n.nspname as "Schema",
pg_catalog.format_type(t.oid, NULL) AS "Name",
pg_catalog.obj_description(t.oid, 'pg_type') as "Description"
FROM pg_catalog.pg_type t
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
WHERE (t.typrelid = 0 OR (SELECT c.relkind = 'c' FROM
pg_catalog.pg_class c WHERE c.oid = t.typrelid))
AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el WHERE el.oid =
t.typelem AND el.typarray = t.oid)
AND pg_catalog.pg_type_is_visible(t.oid)
ORDER BY 1, 2;
**************************

List of data types
Schema | Name | Description
------------+-----------------------------+----------------------------
pg_catalog | abstime | absolute, limited-range date and time (Unix system time)
pg_catalog | aclitem | access control list
pg_catalog | "any" |
pg_catalog | anyarray |
pg_catalog | anyelement |

regards
Pavel Stehule

September 7, 2008

В ожидании 8.4 - \ef в psql

Перевод Waiting for 8.4 - \ef in psql с select * from depesz;

Сегодня Tom Lane применил патч, написанный Abhijit Menon-Sen, который добавляет интересную возможность в psql. А именно - упрощает изменение определения функций.

Сообщение патча наиболее полно всё объясняет:
Реализация psql комманды "\ef" для редактирования определения функции.
В поддержку этого, создание backend-функции pg_get_functiondef().
Комманда функциональна, но, возможно, потребует небольших улучшений...

Abhijit Menon-Sen
Более подробно.

Ранее, для изменения определения функции, надо было сделать дамп схемы базы данных, найти функцию, сделать изменения и загрузить в psql.

Другим способом было хранение creation.sql файла, и его изменение когда необходимо изменить функцию.

Но сейчас всё стало проще. Достаточно вызвать \ef function_name и предпочитаемый вами редактор ($EDITOR) откроется с полным "CREATE OR REPLACE FUNCTION..." на редактирование.

В случае, когда есть несколько функций с указанным именем, вы получите интересное сообщение об ошибке:
# \ef texticlike
ERROR: more than one function named "texticlike"
LINE 1: SELECT 'texticlike'::pg_catalog.regproc::pg_catalog.oid
^
И тогда вы сможете вызвать \ef с параметрами функции:
# \ef texticlike(citext, text)
Великолепное дополнение. psql становится всё лучше и лучше.