【发布时间】:2021-02-03 22:05:15
【问题描述】:
最近,我将 PostgreSQL 11 数据库的 Docker 容器从postgres 换成了postgis/postgis:11-2.5-alpine,将geolocation public.geography(Point,4326) 列添加到public.user 表中,仅此而已。
到目前为止,没有使用 PostGIS 中的任何内容。
在我的应用程序的某些时候,我收到以下错误:
ERROR: permission denied for function geography_eq
CONTEXT: SQL function "user_private_message_peers" statement 1
STATEMENT: select to_json((__local_0__."id")) as "id", to_json((with __local_1__ as (select to_json((json_build_object('id'::text, (__local_2__."id"), 'nickname'::text, (__local_2__."nickname")))) as "@nodes"
db_1 | from "public"."user_private_message_peers"(__local_0__) as __local_2__
db_1 |
db_1 | where (TRUE) and (TRUE)
db_1 |
db_1 |
db_1 | ), __local_3__ as (select json_agg(to_json(__local_1__)) as data from __local_1__) select json_build_object('data'::text, coalesce((select __local_3__.data from __local_3__), '[]'::json)) )) as "@privateMessagePeers"
db_1 | from "public"."current_user"() as __local_0__
db_1 |
db_1 | where (not (__local_0__ is null)) and (TRUE) and (TRUE)
一个函数user_private_message_peers在迁移到PostGIS后没有改变:
CREATE FUNCTION public.user_private_message_peers("user" public."user") RETURNS SETOF public."user"
LANGUAGE sql STABLE STRICT
AS $$
SELECT
distinct u.*
FROM
"user" AS u
INNER JOIN
"privateMessage" pm ON (
pm."recipientId" = u.id OR pm."senderId" = u.id
)
WHERE (
u.id != "user".id
) AND ((
pm."senderId" = 1 AND pm."recipientId" != 1
) OR (
pm."senderId" != 1 AND pm."recipientId" = 1
));
$$
public.user.geolocation 列上没有索引。
SELECT
tablename,
indexname,
indexdef
FROM
pg_indexes
WHERE
schemaname = 'public' AND tablename = 'user'
ORDER BY
tablename,
indexname;
| tablename | indexname | indexdef |
|---|---|---|
| user | user_nickname_key | CREATE UNIQUE INDEX user_nickname_key ON public."user" USING btree (nickname) |
| user | user_pkey | CREATE UNIQUE INDEX user_pkey ON public."user" USING btree (id) |
geography_eq 函数是否在某处隐含使用?
更新:
默认权限为:
\ddp
Default access privileges
-[ RECORD 1 ]-----+--------------------
Owner | postgres
Schema |
Type | function
Access privileges | postgres=X/postgres
【问题讨论】:
标签: postgresql postgis