sql >> データベース >  >> RDS >> PostgreSQL

Postgres FOR LOOP

    手順 ループなどの要素 SQL言語の一部ではなく、手続き型言語関数、プロシージャ(Postgres 11以降)、またはDOの本体内でのみ使用できます。 ステートメント。このような追加要素は、それぞれの手続き言語によって定義されます。デフォルトはPL/pgSQLですが、他にもあります。

    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$;
    

    ループで解決できる多くのタスクには、より短く、より高速なセットベースがあります。 角を曲がったソリューション。あなたの例に相当する純粋なSQL:

    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;
    

    generate_series()について :

    • SELECT句で複数のセットを返す関数に期待される動作は何ですか?

    ランダム選択のパフォーマンスの最適化について:

    • ランダムな行をPostgreSQLで選択するための最良の方法


    1. SQLServerのVARCHARおよびNVARCHARデータ型

    2. Postgresqlでキャリッジリターンと新しい行を削除するにはどうすればよいですか?

    3. データベースの速度を大幅に低下させている6つの問題クエリ

    4. 翻訳番号をハードコードせずに、番号(通貨)をイタリアの通貨にスペルするPlsql