PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да тествам моя ad-hoc SQL с параметри в прозореца за заявка на Postgres

Различни опции.

Предоставете параметри в CTE, за да имате „променливи“ в чист SQL :

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

Това работи за всяко заявка.
Тъй като CTE var съдържа единичен ред безопасно е да го добавите с CROSS JOIN в края на клаузата FROM - всъщност кратката форма с добавянето й след запетая може да е най-добра, защото изричният синтаксис на присъединяване се свързва преди запетаи. Допълнителният псевдоним на таблицата v е по избор за допълнително съкращаване на синтаксиса.

ИЛИ по-евтино без CTE. BTW, защо varchar(16) ? Просто използвайте text :

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

Или използвайте временна таблица да играе подобна роля за всички запитвания в рамките на същата сесия. Временните таблици умират с края на сесията.

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);
  • Относно временните таблици и autovacuum

Или можете да използвате DO изявления като @Houari предоставени или като демонстрирани тук:

  • PostgreSQL зацикля извън функциите. Възможно ли е това?

Имайте предвид, че не можете да върнете стойности от DO изявления. (Можете да използвате RAISE ... все пак.) И не можете да използвате SELECT без цел в plpgsql - процедурният език по подразбиране в DO изявление. Заменете SELECT с PERFORM за да изхвърлите резултатите.

Или можете да използвате персонализирани опции , който можете да зададете в postgresql.conf да бъдат видимиглобално .

Или настройте в сесията си да се вижда по време на сесията и само в същата сесия :

SET my.lastname = 'Troy';

Името на променливата трябва включва точка. Вие сте ограничени до text като тип данни по този начин, но всеки тип данни може да бъде представен като text ...

Можете да използвате current_setting('my.lastname') като стойностен израз. Изпратете, ако имате нужда. Например:current_setting('my.json_var')::json ...

Или използвайте SET LOCAL за да продължи ефектът само за текущата транзакция . Вижте:

  • Предаване на потребителски идентификатор към задействания на PostgreSQL

Или можете да използвате мини IMMUTABLE функциите като глобален постоянни променливи, които само привилегировани потребители могат да манипулират. Вижте:

  • Има ли начин да се дефинира именувана константа в PostgreSQL заявка?

Или когато работите с psql като клиент, използвайте \set или \gset мета-команди и заместване на променливи.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да персонализирате конфигурационния файл на официалното изображение на PostgreSQL Docker?

  2. Деактивирайте проверките на външни ключове на PostgreSQL за миграции

  3. Мащабиране на PostgreSQL за големи количества данни

  4. Разбиране и четене на системния каталог на PostgreSQL

  5. Бавно хибернация за придобиване на Postgres връзка