PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak przetestować mój ad-hoc SQL z parametrami w oknie zapytania Postgres

Różne opcje.

Podaj parametry w CTE, aby mieć „zmienne” w czystym SQL :

WITH var(lastname) AS (SELECT 'Troy'::varchar(16))
SELECT *
FROM   users, var v
WHERE  lastname = v.lastname;

Działa to dla każdego zapytanie.
Ponieważ CTE var przechowuje pojedynczy wiersz bezpiecznie jest dołączyć do niego CROSS JOIN na końcu klauzuli FROM - właściwie krótka forma z dołączeniem jej po przecinku może być najlepsza, ponieważ jawna składnia łączenia wiąże się przed przecinkami. Dodatkowy alias tabeli v jest opcjonalne, aby jeszcze bardziej skrócić składnię.

LUB taniej bez CTE. BTW, dlaczego varchar(16) ? Po prostu użyj text :

SELECT *
FROM   users
JOIN  (SELECT 'Troy'::text) var(lastname) USING (lastname)
WHERE  lastname = var.lastname;

Lub użyj tabeli tymczasowej odgrywać podobną rolę dla wszystkich zapytania w ramach tej samej sesji. Tabele tymczasowe umierają wraz z końcem sesji.

CREATE TEMP TABLE var AS
SELECT text 'Troy' AS lastname;

ANALYZE var;  -- temp tables are not covered by autovacuum

SELECT * FROM users JOIN var USING (lastname);
  • Informacje o tabelach tymczasowych i autovacuum

Lub możesz użyć DO oświadczenia takie jak @Houari dostarczone lub przedstawione tutaj:

  • Pętle PostgreSQL poza funkcjami. Czy to możliwe?

Pamiętaj, że nie możesz zwrócić wartości z DO sprawozdania. (Możesz użyć RAISE ... chociaż.) I nie możesz użyć SELECT bez celu w plpgsql - domyślny język proceduralny w DO oświadczenie. Zastąp SELECT z PERFORM wyrzucać wyniki.

Lub możesz użyć dostosowanych opcji , który możesz ustawić w postgresql.conf być widocznym globalnie .

Lub ustawić w sesji, aby była widoczna przez cały czas trwania sesji i tylko w tej samej sesji :

SET my.lastname = 'Troy';

Nazwa zmiennej musi zawierać kropkę. Jesteś ograniczony do text jako typ danych w ten sposób, ale każdy typ danych może być reprezentowany jako text ...

Możesz użyć current_setting('my.lastname') jako wyrażenie wartości. Przesyłaj, jeśli potrzebujesz. Na przykład:current_setting('my.json_var')::json ...

Lub użyj SET LOCAL aby efekt trwał tylko dla bieżącej transakcji . Zobacz:

  • Przekazywanie identyfikatora użytkownika do wyzwalaczy PostgreSQL

Lub możesz użyć małego IMMUTABLE funkcje jako globalny utrwalone zmienne, którymi mogą manipulować tylko uprzywilejowani użytkownicy. Zobacz:

  • Czy istnieje sposób na zdefiniowanie nazwanej stałej w zapytaniu PostgreSQL?

Lub podczas pracy z psql jako klientem, użyj \set lub \gset metapolecenia i podstawianie zmiennych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kontynuacja transakcji po błędzie naruszenia klucza podstawowego

  2. Porównanie opcji baz danych w chmurze dla PostgreSQL

  3. Postgres SELECT gdzie WHERE jest UUID lub ciągiem

  4. Prezentacja slajdów:Ulepszenia partycjonowania w PostgreSQL 11

  5. Przywracanie kopii zapasowych PostgreSQL i TimescaleDB za pomocą ClusterControl CLI