Wie drucke ich in SQL auf eine Konsole?

7

Ich verwende PostgreSQLUnd ich möchte eine Nachricht an die Konsole drucken.

Wenn ich benutze, benutze plpythonuich plpy.notice Wenn ich benutze, benutze plpgsqlichraise notice

aber wie drucke ich, wenn die Funktion rein ist SQL? Verwenden SELECT 'string'hilft mir nicht, da es die Zeichenfolge in einer Spalte druckt und wenn sich die Nachricht in der Mitte des Codes befindet, wird sie nicht angezeigt. Ich möchte so etwas wie raise notice/ plpy.noticefür SQL.

CREATE OR REPLACE FUNCTION A()
  RETURNS VOID AS
$BODY$ 
                how do i print 'hello world' here?
 $BODY$
  LANGUAGE sql VOLATILE

Wenn es ein plpgsql wäre, würde ich tun:

CREATE OR REPLACE FUNCTION A()
  RETURNS VOID AS
$BODY$ 
        Raise Notice 'hello world'
 $BODY$
  LANGUAGE plpgsql VOLATILE

Ich suche das Äquivalent in LANGUAGE SQL

aayushdagra
quelle
stackoverflow.com/questions/17693259/… überprüfen Sie dies.
SM Shahinul Islam
hilft mir nicht Die Funktion dort ist in plpgsql. Für plpgsql können Sie Raise Notice ausführen. Ich möchte den entsprechenden Befehl für die SQL-Funktion.
Aayushdagra
1
Es gibt kein gleichwertiges Top raisein einfachem SQL
a_horse_with_no_name
1
Cross post: stackoverflow.com/questions/31260497/…
a_horse_with_no_name
Vielleicht ein SELECT 'hello world'? Davon
abgesehen habe

Antworten:

9

Mit psqlkönnten Sie \echo text(oder \qechowenn Sie verwenden \o), zum Beispiel mit psql -feiner Datei mit Inhalt ausführen :

select 'Straight';
\echo BETWEEN
select 'the lines.';

Ausgänge:

 ?column? 
----------
 Straight
(1 row)

BETWEEN
  ?column?  
------------
 the lines.
(1 row)
James Brown
quelle
7

Warum nicht einfach die Funktion plpgsql aufrufen, die innerhalb der SQL-Funktion einen Hinweis auslöst?

Laut dem Dokument:

SQL-Funktionen führen eine beliebige Liste von SQL-Anweisungen aus und geben das Ergebnis der letzten Abfrage in der Liste zurück

So kann am Anfang eine SELECT-Anweisung eingefügt werden, ohne das Ergebnis zu ändern.

create function print(text) returns void as 
$$ begin raise notice '%', $1; end 
$$ language plpgsql; 

create function whatever(int) returns int as $$
  select print('foobar');
  select $1;
 $$ language sql;

select whatever(3);
NOTICE:  foobar
CONTEXT:  SQL function "whatever" statement 1
 whatever 
----------
        3
(1 row)
Daniel Vérité
quelle
6

Sie können Bash-Befehle von psql ausführen. Zum Beispiel:

\! echo "HERE YOUR DEBUG MSG!"
select * from your_table;
0x1337
quelle
Dies ist zwar der Fall, Sie können dies jedoch nicht innerhalb einer SQL-Funktion tun.
Dekso