くわこのpermission denied.

WEBエンジニアの僕がぶつかった技術的な問題や発見

【PostgreSQL】CREATE INDEX ms_ward_geo_idx ON ms_ward USING gist (geo); とは??

stgのpostgresにデータ流し込んでたら、

CREATE INDEX ms_ward_geo_idx ON ms_ward USING gist (geo);

ERROR:  data type point has no default operator class for access method "gist"
HINT:  You must specify an operator class for the index or define a default operator class for the data type.

というエラーが出た。市区町村のgeoデータを入れているpoint型のカラムではインデックス作れんよ的なエラーらしく、調べたら

CREATE EXTENSION btree_gist;

でモダンなポスグレならできるよ的な記事見つけたのでやってみたら

ERROR:  syntax error at or near “EXTENSION”

って出ていろいろ触ってたら、

psql -U postgres -d hogehoge
psql (9.3.5, server 8.4.20)

server8.4.20?

なんぞこれと思ったら、psqlpostgresqlのバージョンが違うということがあるらしい。


/etc/init.d/postgresqlというファイルが8.4のままだったので

cp /usr/bin/postgresql-9.3.5/contrib/start-scripts/linux /etc/init.d/postgresql

でPGDATAを書き換えて

service postgresql start
pg_ctl: PID file "/usr/local/pgsql/data/postmaster.pid" does not exist
Is server running?

psql: could not connect to server: No such file or directory
	Is the server running locally and accepting
	connections on Unix domain socket "/tmp/.s.PGSQL.5432”?

なんかサーバ動いてないよ的なエラーだったので

pg_ctl start -w

でスタートして

psql -U postgres <  hoge.sql

でやっと流し込めた。