2016-12-28 13 views
0

私はPostgreSQLを初めて使用していますが、ヘッダ付きのテーブル全体を.csvにエクスポートする方法に関するチュートリアルがあります。フィールド名のみをエクスポートしたいと思います。Postgresテーブルの列名のみをCSVにエクスポート

テーブルxの列名のみを.csvにエクスポートするクエリを作成するにはどうすればよいですか。

+0

これは重複 –

答えて

0
COPY (select * from table_name where false) -- To return result without rows 
TO 'D:\File.csv' DELIMITER ',' CSV HEADER; 

または

create temp table tmp (like table_name); -- To copy structure into a new temp table 
COPY tmp TO 'D:/File.csv' DELIMITER ',' CSV HEADER; 
drop table tmp; 
+0

のおかげではありませんが、私は名前の列を持っていない 'product_id' ... –

+0

ああ、私はproduct_id'は、その情報の一意のキー –

0

あなたはpsqlコンソールからあなたが\dコマンドを使用して、テーブル構造に関するいくつかの有用な情報を尋ねることができることを知っている必要があります。

もちろん、必要なのは、アプリケーションからSQLクエリを実行してその情報を取得することです。

しかし、あなたは -E(または --echo-hidden)と psqlを呼び出す場合は、その後、 \d some table(または任意の他のコンソールコマンド)を入力した後に、それはまた、出力クエリ(またはクエリ)は、その情報を取得するために使用されます。そのような場合には非常に便利です。例えば

SELECT a.attname 
FROM pg_catalog.pg_attribute a 
WHERE a.attrelid = (
    SELECT c.oid 
    FROM pg_catalog.pg_class c 
    WHERE c.relname ~ '^(foo)$' 
) 
AND a.attnum > 0 AND NOT a.attisdropped 
ORDER BY a.attnum; 

実際には、あなたもWHERE c.relname ~ '^(foo)$'を変更することができます:最初の1と第三のクエリを組み合わせる

test=> \d foo 
********* QUERY ********** 
SELECT c.oid, 
    n.nspname, 
    c.relname 
FROM pg_catalog.pg_class c 
    LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace 
WHERE c.relname ~ '^(foo)$' 
    AND pg_catalog.pg_table_is_visible(c.oid) 
ORDER BY 2, 3; 
************************** 

********* QUERY ********** 
SELECT c.relchecks, c.relkind, c.relhasindex, c.relhasrules, c.relhastriggers, c.relhasoids, '', c.reltablespace, CASE WHEN c.reloftype = 0 THEN '' ELSE c.reloftype::pg_catalog.regtype::pg_catalog.text END, c.relp 
ersistence, c.relreplident 
FROM pg_catalog.pg_class c 
LEFT JOIN pg_catalog.pg_class tc ON (c.reltoastrelid = tc.oid) 
WHERE c.oid = '41967'; 
************************** 

********* QUERY ********** 
SELECT a.attname, 
    pg_catalog.format_type(a.atttypid, a.atttypmod), 
    (SELECT substring(pg_catalog.pg_get_expr(d.adbin, d.adrelid) for 128) 
    FROM pg_catalog.pg_attrdef d 
    WHERE d.adrelid = a.attrelid AND d.adnum = a.attnum AND a.atthasdef), 
    a.attnotnull, a.attnum, 
    (SELECT c.collname FROM pg_catalog.pg_collation c, pg_catalog.pg_type t 
    WHERE c.oid = a.attcollation AND t.oid = a.atttypid AND a.attcollation <> t.typcollation) AS attcollation, 
    NULL AS indexdef, 
    NULL AS attfdwoptions 
FROM pg_catalog.pg_attribute a 
WHERE a.attrelid = '41967' AND a.attnum > 0 AND NOT a.attisdropped 
ORDER BY a.attnum; 
************************** 

[...more...] 

今は、何をしたいだけで構築することは容易ですWHERE c.relname = 'foo'もあります。テーブル名を正規表現で照合できるようにしたい場合を除きます。私はあなたの場合ではないと思います。

+0

おかげで'、参照してください! –

関連する問題