Plpgsql; すべてのテーブル名を配列に格納します

mctuna

私の主な目的は、実際には、すべてのテーブル名に「Messdaten」が含まれていることをフィルタリングし(たとえば、「ID:843063334 CH:0001 Messdaten」)、「create tableas」コマンドを「Backup_Messdaten1」、「Backup_Messdaten2」として使用して新しいテーブルを作成することです'など。

最初に、フィルタリングせずにすべてのテーブル名を格納しようとしました(すべてのテーブル名を取得し、SQLクエリによって「Messdaten」を含む方法があるかもしれませんが、わかりません)、次に「Messdaten」を含むものを格納します別の配列を作成し、その新しい配列を「createtableas」コマンドで使用します。

しかし、私が言ったように、私の最初の目標は、すべてのテーブル名を配列に格納することです。

コード自体;

CREATE OR REPLACE FUNCTION retrieve()
RETURNS text[] AS
$BODY$DECLARE
tbl_names text[];
BEGIN
tbl_names := array(SELECT table_name FROM information_schema.tables WHERE 
table_schema='public' AND table_type='BASE TABLE');
SELECT tbl_names[i] FROM generate_subscripts(tbl_names, 1) g(i);
END;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION retrieve()
OWNER TO postgres;

しかし、上記のコードでは、このようなエラーが発生します。

エラー;

ERROR: could not find array type for data type information_schema.sql_identifier
SQL state: 42704
Context: SQL statement "SELECT array(SELECT table_name FROM information_schema.tables WHERE table_schema='public' AND table_type='BASE TABLE')"
PL/pgSQL function retrieve() line 4 at assignment

何が悪いのか分かりますか?ちなみに私の主な目的を説明しましたが、その目的に関して正しい方向を示していただければ幸いです。

クレイグリンガー
SELECT array_agg(table_name::text)
FROM information_schema.tables
WHERE table_schema='public' AND table_type='BASE TABLE';

テーブル名をにキャストする必要がありますtextサブクエリは不要でありarray_aggarray疑似関数ではなく使用する必要があります。

個人的には、なぜそれらを配列に集約する必要があるのか​​まったくわかりません。私はただ:

DECLARE
    tablename text;
BEGIN
    FOR tablename IN
      SELECT table_name FROM information_schema.tables
      WHERE table_schema='public' AND table_type='BASE TABLE'
      AND ... my extra filters here ...
    LOOP
        EXECUTE format('CREATE TABLE %I AS TABLE %I', tablename || '_backup', tablename);
    END LOOP;
END;

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

plpgsqlの複合配列をループします

分類Dev

plpgsqlでテーブル名として変数を使用する方法

分類Dev

テーブルの行をplpgsql関数に渡す方法は?

分類Dev

plpgsql関数の動的部分

分類Dev

plpgsql機能を使用してpostgresDBにテーブルを作成する

分類Dev

plpgsqlで複合型の配列を選択します

分類Dev

plpgsqlにレコードアイテム名を取得して使用する可能性はありますか?

分類Dev

Postgresql:plpgsqlの一時テーブルで更新を実行しません

分類Dev

plpgsql関数でのquote_ident()の使用

分類Dev

plpgsqlの「performcreateindex」が実行されない

分類Dev

plpgsql関数から整数を返し、すべての変更をロールバックする方法は?

分類Dev

plpgsql関数:クエリを実行し、レコードを処理し、元の結果セットをテーブルとして返します

分類Dev

plpgsqlはselectクエリを変数に動的に追加します

分類Dev

plpgsqlの煩わしい通知を減らします

分類Dev

plpgsqlストアドプロシージャを使用してテーブルを返す

分類Dev

plpgsql関数から行のセットを返します。

分類Dev

plpgsql関数は別の関数値を返します

分類Dev

plpgsql関数から複数の行を返します

分類Dev

plpgsql関数から複数の行を返します

分類Dev

plpgsqlでクエリ文字列を安全に連結する方法は?

分類Dev

PostgreSQL:言語plpgsqlを使用して関数からJSONを返す

分類Dev

多次元配列をパラメータとするplpgsql関数

分類Dev

plpgsqlで更新ステートメントを作成する方法

分類Dev

plpgsql関数を使用して実際の月を5日間に分割する方法

分類Dev

Postgres / plpgsqlのビュー定義で変数を使用する方法

分類Dev

列参照「col_1」があいまいなplpgsqlです

分類Dev

plpgsqlのcontinueステートメントが機能しない

分類Dev

複数の行テーブルを配列に格納して、ユーザーの更新を可能にします

分類Dev

ルーム; 整数配列を別のテーブルに格納しますか?

Related 関連記事

  1. 1

    plpgsqlの複合配列をループします

  2. 2

    plpgsqlでテーブル名として変数を使用する方法

  3. 3

    テーブルの行をplpgsql関数に渡す方法は?

  4. 4

    plpgsql関数の動的部分

  5. 5

    plpgsql機能を使用してpostgresDBにテーブルを作成する

  6. 6

    plpgsqlで複合型の配列を選択します

  7. 7

    plpgsqlにレコードアイテム名を取得して使用する可能性はありますか?

  8. 8

    Postgresql:plpgsqlの一時テーブルで更新を実行しません

  9. 9

    plpgsql関数でのquote_ident()の使用

  10. 10

    plpgsqlの「performcreateindex」が実行されない

  11. 11

    plpgsql関数から整数を返し、すべての変更をロールバックする方法は?

  12. 12

    plpgsql関数:クエリを実行し、レコードを処理し、元の結果セットをテーブルとして返します

  13. 13

    plpgsqlはselectクエリを変数に動的に追加します

  14. 14

    plpgsqlの煩わしい通知を減らします

  15. 15

    plpgsqlストアドプロシージャを使用してテーブルを返す

  16. 16

    plpgsql関数から行のセットを返します。

  17. 17

    plpgsql関数は別の関数値を返します

  18. 18

    plpgsql関数から複数の行を返します

  19. 19

    plpgsql関数から複数の行を返します

  20. 20

    plpgsqlでクエリ文字列を安全に連結する方法は?

  21. 21

    PostgreSQL:言語plpgsqlを使用して関数からJSONを返す

  22. 22

    多次元配列をパラメータとするplpgsql関数

  23. 23

    plpgsqlで更新ステートメントを作成する方法

  24. 24

    plpgsql関数を使用して実際の月を5日間に分割する方法

  25. 25

    Postgres / plpgsqlのビュー定義で変数を使用する方法

  26. 26

    列参照「col_1」があいまいなplpgsqlです

  27. 27

    plpgsqlのcontinueステートメントが機能しない

  28. 28

    複数の行テーブルを配列に格納して、ユーザーの更新を可能にします

  29. 29

    ルーム; 整数配列を別のテーブルに格納しますか?

ホットタグ

アーカイブ