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

Postgres FOR LOOP

Procedury elementy takie jak pętle nie są częścią języka SQL i mogą być używane tylko w treści funkcji języka proceduralnego, procedury (Postgres 11 lub nowszy) lub DO oświadczenie, w którym takie dodatkowe elementy są określone przez odpowiedni język proceduralny. Domyślnie jest to PL/pgSQL, ale są też inne.

Przykład z plpgsql:

DO
$do$
BEGIN 
   FOR i IN 1..25 LOOP
      INSERT INTO playtime.meta_random_sample
         (col_i, col_id)                       -- declare target columns!
      SELECT  i,     id
      FROM   tbl
      ORDER  BY random()
      LIMIT  15000;
   END LOOP;
END
$do$;

W przypadku wielu zadań, które można rozwiązać za pomocą pętli, istnieje krótsza i szybsza oparta na zestawach rozwiązanie za rogiem. Odpowiednik czystego SQL dla twojego przykładu:

INSERT INTO playtime.meta_random_sample (col_i, col_id)
SELECT t.*
FROM   generate_series(1,25) i
CROSS  JOIN LATERAL (
   SELECT i, id
   FROM   tbl
   ORDER  BY random()
   LIMIT  15000
   ) t;

O generate_series() :

  • Jakie jest oczekiwane zachowanie wielu funkcji zwracających zestaw w klauzuli SELECT?

O optymalizacji wydajności losowych wyborów:

  • Najlepszy sposób na wybieranie losowych wierszy PostgreSQL


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyzwalacz Postgres po uzyskaniu dostępu do insertu NOWOŚĆ

  2. Niesławny wyjątek java.sql.SQLException:nie znaleziono odpowiedniego sterownika

  3. PgBouncer 1.7 – „Kolory różnią się po zmartwychwstaniu”

  4. Reprezentowanie dat, godzin i interwałów w PostgreSQL

  5. Uzyskaj najczęstszą wartość dla każdej wartości innej kolumny w SQL