4

新しいpostgres dbを作成し、必要なpostgis拡張機能をロードした後

$ createdb  demodb
$ psql demodb
> CREATE EXTENSION postgis;
> CREATE EXTENSION postgis_topology;

django.db.utils.ProgrammingError: type "geometry" does not existdjango の実行中に例外がスローされますmanage.py migrate

この後、pgadminで失敗したクエリを実行しようとしましたが、同じことがわかりました:type "geometry" does not exist

クエリの前に追加CREATE EXTENSION postgis;するとこれが修正され、クエリはOKを返しました。しかし、manage.py migrate再度実行すると同じ例外がスローされました。

新しい拡張機能の読み込みは永続的ではありませんか? もしそうなら、どうすればそれを永続的にロードできるので、実行時にロードされますmigrateか?

4

3 に答える 3

2

CREATE EXTENSION実行しているデータベースに対して永続的です。指定された(または現在のデフォルト)スキーマにオブジェクトを作成します。ドキュメントごと:

スキーマ名

拡張機能がコンテンツの再配置を許可している場合に、拡張機能のオブジェクトをインストールするスキーマの名前。名前付きスキーマはすでに存在している必要があります。指定されておらず、拡張機能の制御ファイルでもスキーマが指定されていない場合は、現在のデフォルトのオブジェクト作成スキーマが使用されます。

拡張機能自体はスキーマ内にあるとは見なされないことに注意してください。拡張機能には、データベース全体で一意である必要がある非修飾名があります。ただし、拡張に属するオブジェクトはスキーマ内にある場合があります。

に関与しているスキーマを確認しpsqlます。

\connect mydb
\x 
\dx postgis*

使用するスキーマは現在のものでなければなりませんsearch_path(または、すべての参照をスキーマ修飾する必要があります)。追加のスキーマや拡張機能がまったく含まれて
いるかどうかはわかりません。migrateおそらく、これはsearch_path

于 2014-08-13T13:41:43.863 に答える