LINUX.ORG.RU

PostgreSQL ODBC schema

 ,


0

1

Кто-нибудь знает, можно ли в открыто-свободном драйвере ODBC для PostgreSQL (https://odbc.postgresql.org/) задать в connection string схему? В закрытом драйвере от devart.com такая фича есть — можно просто добавить параметр schema=...;. А здесь есть?

★★★

Ответ на: комментарий от theNamelessOne

https://www.postgresql.org/message-id/E0CE7E8BCD904FDE90D40E0512AF1F93%40HIRO57887DE653

Видел, но не понял. search_path и schema — одно и то же?

А если надо не искать, а создать таблицу? По умолчанию она создаётся в public, а я хочу создать, скажем, в my_private_schema. То есть не temp_data_table, а my_private_schema.temp_data_table. Должно сработать?

У меня не работает, при добавлении в стринг параметра search_path=my_private_schema; продолжает писать в public, но дело может быть в программе, которая пишет в БД.

olegd ★★★ ()
Последнее исправление: olegd (всего исправлений: 1)
Ответ на: комментарий от olegd

Видел, но не понял. search_path и schema — одно и то же?

search_path — это настройка, в которой хранится список схем, в которых Postgres будет искать unqualified идентификаторы (в порядке указания схем). В доке про это написано. По умолчанию search_path = $user, public, что означает, что Postgres сначала будет искать в схеме, совпадающей с именем пользователя, а потом уже в схеме public.

А если надо не искать, а создать таблицу? По умолчанию она создаётся в public, а я хочу создать, скажем, в my_private_schema. То есть не temp_data_table, а my_private_schema.temp_data_table. Должно сработать?

Если ты при создании таблицы явно не указываешь схему, то используется т.н. «текущая схема»:

If a schema name is given (for example, CREATE TABLE myschema.mytable …) then the table is created in the specified schema. Otherwise it is created in the current schema.

Текущая схема — это схема, которая стоит первой в search_path (не считая $user). Посмотреть её можно с помощью функции current_schema(). Так что если бы твой параметр работал, то тогда бы у тебя текущая схема была my_private_schema, и таблицы бы по умолчанию создавались в ней (например).

Если не разберёшься, как задавать search_path через connection string, можешь просто при создании нового соединения с БД первой же командой выполнять

set search_path = my_private_schema;
theNamelessOne ★★★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.