PostgreSQL에서 테이블의 목록 열 이름과 데이터 유형을 가져오는 방법은 무엇입니까?
Postgre에서 테이블의 열 이름 및 데이터 유형 목록을 가져오려면 어떻게 해야 합니까?쿼리를 사용한 SQL?
SELECT
column_name,
data_type
FROM
information_schema.columns
WHERE
table_name = 'table_name';
위의 쿼리를 사용하여 열과 데이터 유형을 열 수 있습니다.
열다.psql
명령줄 및 유형:
\d+ table_name
SELECT
a.attname as "Column",
pg_catalog.format_type(a.atttypid, a.atttypmod) as "Datatype"
FROM
pg_catalog.pg_attribute a
WHERE
a.attnum > 0
AND NOT a.attisdropped
AND a.attrelid = (
SELECT c.oid
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relname ~ '^(hello world)$'
AND pg_catalog.pg_table_is_visible(c.oid)
);
더 많은 정보: http://www.postgresql.org/docs/9.3/static/catalog-pg-attribute.html
테이블 이름이 동일한 스키마가 여러 개 있는 경우 스키마 이름을 추가하는 것을 잊지 마십시오.
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'your_table_name' AND table_schema = 'your_schema_name';
또는 psql 사용:
\d+ your_schema_name.your_table_name
특정 스키마에서 테이블의 열 이름 및 유형 찾기를 지원하고 하위 쿼리 없이 JOIN을 사용하는 버전
SELECT
pg_attribute.attname AS column_name,
pg_catalog.format_type(pg_attribute.atttypid, pg_attribute.atttypmod) AS data_type
FROM
pg_catalog.pg_attribute
INNER JOIN
pg_catalog.pg_class ON pg_class.oid = pg_attribute.attrelid
INNER JOIN
pg_catalog.pg_namespace ON pg_namespace.oid = pg_class.relnamespace
WHERE
pg_attribute.attnum > 0
AND NOT pg_attribute.attisdropped
AND pg_namespace.nspname = 'my_schema'
AND pg_class.relname = 'my_table'
ORDER BY
attnum ASC;
더 많은 스키마와 nullables를 지원하도록 Pratik 답변이 업데이트되었습니다.
SELECT
"pg_attribute".attname as "Column",
pg_catalog.format_type("pg_attribute".atttypid, "pg_attribute".atttypmod) as "Datatype",
not("pg_attribute".attnotnull) AS "Nullable"
FROM
pg_catalog.pg_attribute "pg_attribute"
WHERE
"pg_attribute".attnum > 0
AND NOT "pg_attribute".attisdropped
AND "pg_attribute".attrelid = (
SELECT "pg_class".oid
FROM pg_catalog.pg_class "pg_class"
LEFT JOIN pg_catalog.pg_namespace "pg_namespace" ON "pg_namespace".oid = "pg_class".relnamespace
WHERE
"pg_namespace".nspname = 'schema'
AND "pg_class".relname = 'table'
);
SELECT column_name,data_type
FROM information_schema.columns
WHERE
table_name = 'your_table_name'
AND table_catalog = 'your_database_name'
AND table_schema = 'your_schema_name';
이 항목을 '더 완전하게' 만들기.
테이블이 아닌 SELECT 문에 있는 열 이름과 데이터 유형이 필요했습니다.
실제 기존 테이블 대신 SELECT 문에서 이 작업을 수행하려면 다음 작업을 수행할 수 있습니다.
DROP TABLE IF EXISTS abc;
CREATE TEMPORARY TABLE abc AS
-- your select statement here!
SELECT
*
FROM foo
-- end your select statement
;
select column_name, data_type
from information_schema.columns
where table_name = 'abc';
DROP IF EXISTS abc;
간단히 설명하면, (temp) select 문의 테이블을 만듭니다. 이 테이블은 (다른 것들 중에서) @a_horse_with_no_name 및 @selva에서 제공하는 쿼리를 통해 '호출'할 수 있습니다.
이게 도움이 되길 바랍니다.
pgAdmin 4에서 직접 PSQL cl 없이 데이터 형식의 열 이름을 가져오는 방법을 찾고 있었는데 해결 방법을 찾았습니다.옵션 하나 추가:
원하는 데이터베이스 > 생성 ERD(베타) > SQL(또는 Alt+Ctrl+S) 생성을 마우스 오른쪽 버튼으로 클릭하면 pgAdmin 4에서 열 이름과 데이터 유형을 가진 모든 테이블을 찾을 수 있는 Query Editor가 열립니다.
--how to get a list column names and datatypes of a table in PostgreSQL?
SELECT DISTINCT
ROW_NUMBER () OVER (ORDER BY pgc.relname , a.attnum) as rowid ,
pgc.relname as table_name ,
a.attnum as attr,
a.attname as name,
format_type(a.atttypid, a.atttypmod) as typ,
a.attnotnull as notnull,
com.description as comment,
coalesce(i.indisprimary,false) as primary_key,
def.adsrc as default
FROM pg_attribute a
JOIN pg_class pgc ON pgc.oid = a.attrelid
LEFT JOIN pg_index i ON
(pgc.oid = i.indrelid AND i.indkey[0] = a.attnum)
LEFT JOIN pg_description com on
(pgc.oid = com.objoid AND a.attnum = com.objsubid)
LEFT JOIN pg_attrdef def ON
(a.attrelid = def.adrelid AND a.attnum = def.adnum)
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = pgc.relnamespace
WHERE 1=1
AND pgc.relkind IN ('r','')
AND n.nspname <> 'pg_catalog'
AND n.nspname <> 'information_schema'
AND n.nspname !~ '^pg_toast'
AND a.attnum > 0 AND pgc.oid = a.attrelid
AND pg_table_is_visible(pgc.oid)
AND NOT a.attisdropped
ORDER BY rowid
;
스키마를 언급하지 않아도 필요한 세부 정보를 얻을 수 있습니다. 이 쿼리를 사용해 보십시오.->
information_message.dll에서 columnn_name, data_type을 선택합니다. 여기서 table_name = 'table_name';
아래에는 제공된 스키마 이름에 있는 모든 테이블의 고유한 모든 데이터 유형이 나열됩니다.
\copy (select distinct data_type, column_name from information_schema.columns where table_name in (SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema' and schemaname = '<Your schema name>')) to 'datatypes.csv' delimiter as ',' CSV header
테이블 정보를 가져오는 새 함수 만들기
CREATE FUNCTION xdesc(in t varchar) RETURNS table(column_name varchar,
data_type varchar) AS $$
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = $1
$$ LANGUAGE SQL;
select xdesc('rs_rail_job_index')
저는 @Pratik의 대답이 중요하다는 것을 알았지만, 왠지 그것은 저에게 효과가 없었습니다.가능하다면 좀 더 신중하게 다시 작성했습니다.더 이해하기 쉽고 스키마를 지원하며 실제로 저에게 효과가 있습니다(postgres 15
. 조인 없음.
SELECT
attname AS colname,
pg_catalog.format_type(atttypid, atttypmod) AS coltype
FROM
pg_catalog.pg_attribute
WHERE
attnum > 0 AND
NOT attisdropped AND
attrelid = 'your table name'::regclass
ORDER BY
attnum ASC
;
추신: 합성 유형도 지원합니다(실제로 매우 필요했습니다).다음과 같은 문자열을 반환합니다.schemaname.tablename
.
언급URL : https://stackoverflow.com/questions/20194806/how-to-get-a-list-column-names-and-datatypes-of-a-table-in-postgresql
'programing' 카테고리의 다른 글
Excel VBA, 비활성 시트에서 범위 가져오기 (0) | 2023.05.06 |
---|---|
내가 개발 중인 iOS 애플리케이션이 워크스테이션에서 장치에 생성한 파일을 탐색하시겠습니까? (0) | 2023.05.06 |
Excel Open XML을 읽는 것은 빈 셀을 무시하는 것입니다. (0) | 2023.05.01 |
Postgre를 합니까?SQL에서 "어센틱하지 않은" 데이터 정렬을 지원합니까? (0) | 2023.05.01 |
새 콘센트 연결을 삽입할 수 없습니다.명명된 클래스에 대한 정보를 찾을 수 없습니다. (0) | 2023.05.01 |