Macros for epsql
Hello I finished scripting in psql. Now, we are able to write some simply macros for epsql. This feature allows some better customisation. The syntax is trivial:
\newcommand string ... commands ... \endnewcommandWe can use a parameters inside command definition. It is usual psql variables named 1 .. 10.
\newcommand desc \ifdef 1 \d :1 \else \echo 'missing table name' \endifdef \endnewcommandUsage is very simple. New command is written to .psqlrc file. After registration, we can use new command:
postgres=# desc tab
Table "public.tab"
┌────────┬─────────┬───────────┐
│ Column │ Type │ Modifiers │
├────────┼─────────┼───────────┤
│ a │ integer │ │
│ b │ integer │ │
│ c │ integer │ │
└────────┴─────────┴───────────┘
Indexes:
"ff" btree (a)
postgres=# desc
missing table name
postgres=#
You can download this patch from pgFoundry.
Samples
I wrote some macros:Top Ten
\newcommand \tt \ifdef 1 select relname, relpages, reltuples from pg_class order by relpages desc limit :1; \else select relname, relpages, reltuples from pg_class order by relpages desc; \endifdef \endnewcommandUsage:
postgres=# \tt 3 ┌──────────────┬──────────┬───────────┐ │ relname │ relpages │ reltuples │ ├──────────────┼──────────┼───────────┤ │ pg_proc │ 54 │ 2232 │ │ pg_depend │ 41 │ 5557 │ │ pg_attribute │ 36 │ 1960 │ └──────────────┴──────────┴───────────┘ (3 rows)
Regtype
\newcommand \rt
select :{1}::regtype as :[1];
\endnewcommand
Usage:
postgres=# \rt 23 ┌─────────┐ │ 23 │ ├─────────┤ │ integer │ └─────────┘ (1 row)
Show tables
\newcommand show tables \ifdef 1 \dt :1 \else \dt \endifdef \endnewcommandUsage:
postgres=# show tables
List of relations
┌────────┬──────┬───────┬───────┐
│ Schema │ Name │ Type │ Owner │
├────────┼──────┼───────┼───────┤
│ public │ tab │ table │ pavel │
└────────┴──────┴───────┴───────┘
(1 row)
show create table
\newcommand show create table \echo `/usr/local/pgsql/bin/pg_dump --schema-only -t :1 :DBNAME| grep -v -P '(^SET)|(^[-])|(^ALTER)|(^$)'` \endnewcommandUsage:
postgres=# show create table tab
CREATE TABLE tab (
a integer,
b integer,
c integer
);
CREATE INDEX ff ON tab USING btree (a);


1 Comments:
not bad ;-)
i wish you a happy new year, thanks for your work.
Andreas (akretschmer on IRC)
Post a Comment
Subscribe to Post Comments [Atom]
<< Home