복붙노트

[SQL] 어떻게 PostgreSQL을 특정 컬럼을 갖는 테이블을 찾을 수

SQL

어떻게 PostgreSQL을 특정 컬럼을 갖는 테이블을 찾을 수

나는 PostgreSQL을 9.1을 사용하고 있습니다. 나는 테이블의 열 이름을 가지고있다. 가 /이 열을 가지고있다 테이블 (들)을 찾을 수 있습니까? 그렇다면, 어떻게?

해결법

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

    1.당신은 시스템 카탈로그를 조회 할 수 있습니다 :

    당신은 시스템 카탈로그를 조회 할 수 있습니다 :

    select c.relname
    from pg_class as c
        inner join pg_attribute as a on a.attrelid = c.oid
    where a.attname = <column name> and c.relkind = 'r'
    

    SQL 바이올린 데모

  2. ==============================

    2.당신은 또한 할 수있다

    당신은 또한 할 수있다

     select table_name from information_schema.columns where column_name = 'your_column_name'
    
  3. ==============================

    3.나는 도심 @Roman Pekar의 쿼리를 사용하고 (내 경우에는 관련) 스키마 이름을 추가 한

    나는 도심 @Roman Pekar의 쿼리를 사용하고 (내 경우에는 관련) 스키마 이름을 추가 한

    select n.nspname as schema ,c.relname
        from pg_class as c
        inner join pg_attribute as a on a.attrelid = c.oid
        inner join pg_namespace as n on c.relnamespace = n.oid
    where a.attname = 'id_number' and c.relkind = 'r'
    

    SQL 바이올린 데모

  4. ==============================

    4.간단히:

    간단히:

    $ psql mydatabase -c '\d *' | grep -B10 'mycolname'
    

    확대 -B 도움이 필요한 경우, 테이블 이름을 얻기 위해 오프셋

  5. ==============================

    5.와일드 카드 지원 찾으려는 문자열을 포함하는 테이블 스키마 및 테이블 이름을 찾습니다.

    와일드 카드 지원 찾으려는 문자열을 포함하는 테이블 스키마 및 테이블 이름을 찾습니다.

    select t.table_schema,
           t.table_name
    from information_schema.tables t
    inner join information_schema.columns c on c.table_name = t.table_name
                                    and c.table_schema = t.table_schema
    where c.column_name like '%STRING%'
          and t.table_schema not in ('information_schema', 'pg_catalog')
          and t.table_type = 'BASE TABLE'
    order by t.table_schema;
    
  6. ==============================

    6.

    select t.table_schema,
           t.table_name
    from information_schema.tables t
    inner join information_schema.columns c on c.table_name = t.table_name 
                                    and c.table_schema = t.table_schema
    where c.column_name = 'name_colum'
          and t.table_schema not in ('information_schema', 'pg_catalog')
          and t.table_type = 'BASE TABLE'
    order by t.table_schema;
    
  7. from https://stackoverflow.com/questions/18508422/how-to-find-a-table-having-a-specific-column-in-postgresql by cc-by-sa and MIT license