2

postgresql データベースのリストをループして、postgresql 関数内からいくつかのクエリを実行したいと思います。これがコード例です...

    CREATE OR REPLACE FUNCTION my_function() 
    RETURNS VOID AS  
    $$
    DECLARE
        db VARCHAR(50); -- this declaration is where the confusion is
    BEGIN
        FOR db IN 
            SELECT datname FROM pg_catalog.pg_database WHERE datname ~ '^mydbname_'
        LOOP
            -- this is just an example
            SELECT * FROM db;
        END LOOP;
    END; 
    $$
    LANGUAGE 'plpgsql';

postgresql を使用しEXECUTEてクエリを文字列 (例: ) として評価できることは承知していますEXECUTE 'SELECT * FROM ' || db || ';';が、クエリはかなり長く複雑です。

postgresqlでこれを行う方法はありますか? 「データベース」宣言タイプはありますか?

4

3 に答える 3

2

変数をオブジェクト名 (データベース、テーブル、列) としてクエリで直接使用することはできません。EXECUTE を使用する必要があります。

クロスデータベースクエリを実行できないため、これはとにかく機能しません。クライアントからこれを行うか、dblink の使用を検討してください。SQL/MED (Foreign Data Wrappers) の実装がありますが、奇妙なことに、まだ PostgreSQL ラッパーはないと思います。

于 2012-08-22T15:32:22.353 に答える
1

タイプnameのpg_databaseにdbnameがありませんか?

試すDECLARE db_name NAME;

于 2012-08-22T15:08:58.800 に答える