2013-04-25 5 views

Odpowiedz

1

Dlaczego nie używać widoku? Może być views pomoże w twojej sprawie.

8

Nie wiem o żadnej możliwości. Jest tylko obejście dla psql na podstawie zmiennych psql, ale jest wiele ograniczeń - używanie parametrów dla tych zapytań jest trudne.

postgres=# \set whoami 'SELECT CURRENT_USER;' 
postgres=# :whoami 
current_user 
-------------- 
pavel 
(1 row) 
+0

Zasadniczo wygląda na to, że widoki są po prostu lepsze, nie? Domyślam się, że to, czego szukam (lokalne aliasy), nie jest "zgodne z duchem" db admin. Powinienem dodać zwykłe widoki za każdym razem, gdy konfiguruję bazę danych. – lajarre

+0

Zależy od tego, co chcesz.Ale główne użycie widoków to prostota zapytań (ogólnie uproszczenie pracy z danymi) i powód bezpieczeństwa, więc prawdopodobnie użyłbyś widoków :) –

1

Jak korzystać z UDF? Możesz utworzyć UDF, który zwraca tabelę (zestaw), a następnie możesz zapytać go w ten sposób: wybierz * z udf();

To nie jest tak czyste, ale jest lepsze niż nic i jest przenośne. UDF mogą również przyjmować parametry.

+1

Chciałem czegoś, co nie zapisuje niczego w db, ale znowu to nie jest "Duch" tego, jak rzeczy działają, więc nie ma dobrej odpowiedzi. Widoki są bardziej dostosowane w moim przypadku, więc przyjmuję odpowiedź mówiącą o poglądach. – lajarre

2

Odpowiedź Pavel jest prawie poprawna, z wyjątkiem tego, że możesz użyć parametru w inny sposób.

po

\set s 'select * from ' 
\set l ' limit 10;' 

Poniżej polecenia

:s agent :l 

wyniesie do

select * from agent limit 10; 

Według http://www.postgresql.org/docs/9.0/static/app-psql.html

Jeśli niecytowany argument rozpoczyna się dwukropkiem (:), jest on traktowany jako zmienna psql , a wartość zmiennej jest używana jako argument . Jeśli nazwa zmiennej jest otoczona pojedynczymi cudzysłowami (np. : "var"), zostanie ona zmieniona jako literał SQL, a jako argument zostanie użyty . Jeśli nazwa zmiennej jest otoczona podwójnymi cytatami , zostanie zignorowana jako identyfikator SQL, a wynikiem będzie używany jako argument.

Można również użyć backquote uruchomić polecenie powłoki

argumentów, które są zamknięte w małe cudzysłowy (`) są traktowane jako polecenia linii, która jest przekazywana do powłoki. Wynik polecenia (z usuniętym końcowym znakiem nowej linii ) jest traktowany jako wartość argumentu. Powyższe sekwencje specjalne w postaci mają również zastosowanie w podstronach.