2 Minuten Lesezeit (437 Worte)

Kurz und gut – Episode #18 PostgreSQL: Makros in psql

Makros sind in der Welt der Datenbankverwaltung und -interaktion ein leistungsstarkes Werkzeug. In PostgreSQL ermöglichen Makros in der psql-Umgebung die Automatisierung von wiederkehrenden Aufgaben, die Vereinfachung von Abfragen und die Steigerung der Effizienz bei der Interaktion mit der Datenbank. Dieser Artikel wird einen Einblick in die Verwendung von Makros in psql bieten und zeigen, wie Sie Entwickler:innen und Datenbankadministrator:innen helfen können, ihre Arbeit zu optimieren.

Grundlagen von psql-Makros

In psql, der interaktiven PostgreSQL-Shell, können Makros erstellt und verwendet werden, um die Ausführung von häufig verwendeten Befehlen zu vereinfachen. Ein psql-Makro ist im Wesentlichen eine benannte Sequenz von SQL-Anweisungen, die durch einen einzigen Befehl aufgerufen werden können. Dies erleichtert die Wiederverwendung von Code und beschleunigt repetitive Aufgaben.

Makros werden in psql mithilfe des \set-Befehls erstellt. Hier sind zwei einfache Beispiele:

Anzeigen der PostgreSQL-Version

postgres=# \set version 'select version();'

Anzeige des Ausführungsplanes einer Abfrage (EXPLAIN) mit Optionen

postgres=# \set fullexplain EXPLAIN (ANALYZE, BUFFERS, COSTS, SETTINGS, VERBOSE) 

Ausführen von Makros

Nun kann das Makro in einer Abfrage verwendet werden: 

postgres=# :version
            version 
PostgreSQL 16.1 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-20), 64-bit 
(1 row)  

Oder: 

postgres=#  :fullexplain select e.empno,e.name,d.name from scott.emp e,scott.dept d where d.deptno=e.deptno; 
 
QUERY PLAN 
----------------------------------------------------------- 
 Hash Join  (cost=1.09..2.31 rows=14 width=19) (actual time=0.029..0.045 rows=14 loops=1) 
   Output: e.empno, e.name, d.name 
   Inner Unique: true 
   Hash Cond: (e.deptno = d.deptno) 
   Buffers: shared hit=2 
   ->  Seq Scan on scott.emp e  (cost=0.00..1.14 rows=14 width=14) (actual time=0.011..0.012 rows=14 loops=1) 
         Output: e.empno, e.name, e.job, e.manager, e.hiredate, e.salary, e.comm, e.deptno 
         Buffers: shared hit=1 
   ->  Hash  (cost=1.04..1.04 rows=4 width=13) (actual time=0.012..0.012 rows=4 loops=1) 
         Output: d.name, d.deptno 
         Buckets: 1024  Batches: 1  Memory Usage: 9kB 
         Buffers: shared hit=1 
         ->  Seq Scan on scott.dept d  (cost=0.00..1.04 rows=4 width=13) (actual time=0.003..0.004 rows=4 loops=1) 
               Output: d.name, d.deptno 
               Buffers: shared hit=1 
 Settings: work_mem = '128MB', effective_cache_size = '2GB', effective_io_concurrency = '100', random_page_cost = '1.1' 
 Query Identifier: -4011461149524585734 
 Planning: 
   Buffers: shared hit=4 
 Planning Time: 0.175 ms 
 Execution Time: 0.202 ms 
(21 rows)  

Makros in .psqlrc

Damit Makros beim Aufruf von psql automatisch aktiviert werden, kann man die Definitionen in der .psqlrc-Datei im HOME-Verzeichnis des/der Linux-Benutzer:in ablegen. Die .psqlrc-Datei wird beim Aufruf von psql automatisch ausgeführt und erlaubt so benutzerspezifische Anpassungen. 

Fazit

Die Verwendung von Makros in psql kann die Effizienz bei der Entwicklung und Verwaltung von Datenbanken erheblich steigern. Durch die Automatisierung wiederkehrender Aufgaben können Entwickler:innen und Datenbankadministrator:innen Zeit sparen und die Fehleranfälligkeit reduzieren. Darüber hinaus ermöglicht die Parametrisierung von Makros die einfache Anpassung von Abfragen an unterschiedliche Anforderungen.

Weitere Informationen zu PostgreSQL gibt es in unserem Seminar "PostgreSQL-Administration".

Seminarempfehlung

Principal Consultant bei ORDIX

 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Sonntag, 08. September 2024

Sicherheitscode (Captcha)

×
Informiert bleiben!

Bei Updates im Blog, informieren wir per E-Mail.