복붙노트

[SQL] PostgreSQL의 - 테이블 이름 같은 동적 값 [중복]

SQL

PostgreSQL의 - 테이블 이름 같은 동적 값 [중복]

나는 아래 다른 쿼리에 대한 테이블 이름으로 쿼리에서 반환 된 문자열을 사용하고 싶습니다.

SELECT 'backup_' || TO_CHAR(CURRENT_DATE,'yyyy-mm-dd')

당신이 볼 수 있듯이 그것은 문자열을 반환합니다. 나는 예를 들어, 다른 쿼리에 대한 입력으로 사용하고자하는

CREATE TABLE (SELECT 'backup_' || TO_CHAR(CURRENT_DATE,'yyyy-mm-dd')) 
AS * SELECT FROM backup

그것은 할 수 있습니까? 어떤 단서 방법?

해결법

  1. ==============================

    1.당신은 DO 블록 또는 PL / pgSQL의 기능 (CREATE OR REPLACE FUNCTION ... 언어의 plpgsql) 경유하여 PL / pgSQL의 EXECUTE 문을 사용해야합니다. 동적 SQL은 절차 PL / pgSQL의 변형에서, PostgreSQL을에 의해 사용되는 일반 SQL 언어에서 지원되지 않습니다.

    당신은 DO 블록 또는 PL / pgSQL의 기능 (CREATE OR REPLACE FUNCTION ... 언어의 plpgsql) 경유하여 PL / pgSQL의 EXECUTE 문을 사용해야합니다. 동적 SQL은 절차 PL / pgSQL의 변형에서, PostgreSQL을에 의해 사용되는 일반 SQL 언어에서 지원되지 않습니다.

    DO
    $$
    BEGIN
    EXECUTE format('CREATE TABLE %I AS SELECT * FROM backup', 'backup_' || to_char(CURRENT_DATE,'yyyy-mm-dd'));
    END;
    $$ LANGUAGE plpgsql;
    

    포맷 (...)의 함수 %의 I 및 % L-포맷 지시자 적절한 식별자 및 문자 각각 인용 할.

    리터럴을 위해 나는 %의 L로 (...) 사용보다는 형식 ... EXECUTE 사용하는 것이 좋습니다,하지만 테이블 / 열 이름과 같은 식별자의 형식 %의 I 패턴에서 quote_ident 통화 상세에 좋은의 간결한 대안입니다.

  2. from https://stackoverflow.com/questions/13289304/postgresql-dynamic-value-as-table-name by cc-by-sa and MIT license