Dengan query berikut, kita bisa mendapatkan daftar nama kolom dan tipe data tabel di PostgreSQL.
Jawaban:
Buka psql
baris perintah dan ketik:
\d+ table_name
psql -E
dan untuk setiap perintah backslash, SQL masing-masing akan ditampilkan sebelum hasil perintah.
select column_name,data_type
from information_schema.columns
where table_name = 'table_name';
dengan query di atas Anda dapat kolom dan datatype-nya
geometry(Geometry,[SRID])
).
table_catalog = 'my_database'
dan table_schema = 'my_schema'
untuk mendapatkan hanya kolom dari tabel tertentu dari skema tertentu dari database tertentu.
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)
);
Info lebih lanjut tentang itu: http://www.postgresql.org/docs/9.3/static/catalog-pg-attribute.html
c.relname ~ '^(hello world)$
bukan hanya c.relname = 'hello world'
?
Jangan lupa untuk menambahkan nama skema jika Anda memiliki beberapa skema dengan nama tabel yang sama.
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'your_table_name' AND table_schema = 'your_schema_name';
atau menggunakan psql:
\d+ your_schema_name.your_table_name
Jawaban Pratik yang diperbarui untuk mendukung lebih banyak skema dan nullables:
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'
);
Versi yang mendukung pencarian nama kolom dan tipe tabel dalam skema tertentu, dan menggunakan GABUNG tanpa subkueri apa pun
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;
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
;
Untuk membuat topik ini 'lebih lengkap'.
Saya membutuhkan nama kolom dan tipe data pada pernyataan SELECT (bukan tabel).
Jika Anda ingin melakukan ini pada pernyataan SELECT dan bukan pada tabel aktual yang sudah ada, Anda dapat melakukan hal berikut:
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;
Penjelasan singkatnya, itu membuat tabel (temp) dari pernyataan pilih Anda, yang dapat Anda 'panggil' melalui kueri yang disediakan oleh (antara lain) @a_horse_with_no_name dan @selva.
Semoga ini membantu.
tanpa menyebutkan skema juga Anda bisa mendapatkan detail yang diperlukan Coba kueri ini->
pilih nama_kolom, jenis_data dari information_schema.columns di mana nama_tabel = 'nama_tabel';
pilih nama_kolom, jenis_data dari informasi_sekolah.kolom di mana nama_tabel = 'nama_tabel_anda' dan nama_tabel = 'nama_data_anda' dan skema_anda = 'nama_sekolah_anda';