WARNING: This post is ancient and probably wrong.
As of today, neither pgAdmin nor PG Commander display hstore data nicely. Here’s a 5-line Ruby script to stick in ~/bin/hscv
that dumps a hstore column to a CSV:
#!/usr/bin/env ruby
# Usage: hcsv DBNAME TBLNAME HSTORECOL
# Output columns will be id + all the hstore keys
dbname, tblname, hstorecol = ARGV[0..2]
# Get hstore keys
out = `psql #{dbname} --tuples --command "SELECT DISTINCT k FROM (SELECT skeys(#{hstorecol}) AS k FROM #{tblname}) AS dt ORDER BY k"`
headers = out.split(/\n/).map(&:strip)
# Dump CSV of id + all hstore keys
hstore_headers_sql = headers.map { |k| %{#{hstorecol}->'#{k}' AS "#{k}"} }.join(', ')
system 'psql', dbname, '--tuples', '--command', "COPY (SELECT id, #{hstore_headers_sql} FROM #{tblname}) TO STDOUT (FORMAT 'csv', HEADER)"
{.wide}
So in your showoff
database you have a pets
table with an hstore column called d
:
$ createdb showoff
$ psql showoff
psql (9.1.9)
Type "help" for help.
showoff=# CREATE EXTENSION hstore;
CREATE EXTENSION
showoff=# CREATE TABLE pets (id SERIAL, d HSTORE);
CREATE TABLE
showoff=# INSERT INTO pets (d) VALUES ('"name"=>"Jerry","breed"=>"beagle","age"=>"6"');
INSERT 0 1
showoff=# INSERT INTO pets (d) VALUES ('"name"=>"Amigo","breed"=>"lizard","age"=>"15"');
INSERT 0 1
showoff=# select * from pets;
id | d
----+-------------------------------------------------
2 | "age"=>"6", "name"=>"Jerry", "breed"=>"beagle"
3 | "age"=>"15", "name"=>"Amigo", "breed"=>"lizard"
(2 rows)
{.wide}
Then you can do:
$ hcsv showoff pets d
id,age,breed,name
2,6,beagle,Jerry
3,15,lizard,Amigo
{.wide}