Содержание
- Ссылки между базами данных Postgresql не реализованы
- Обсуждение: SQL Error [0A000]: ERROR: nondeterministic collations are notsupported for LIKE
- SQL Error [0A000]: ERROR: nondeterministic collations are notsupported for LIKE
- Re: SQL Error [0A000]: ERROR: nondeterministic collations are not supported for LIKE
- Re: SQL Error [0A000]: ERROR: nondeterministic collations are notsupported for LIKE
- Почему я получаю «ссылки между базами данных не реализованы»?
- 5 ответов
- Почему я получаю «ссылки между базами данных не реализованы»?
- 5 ответы
- Почему я получаю «ссылки между базами данных не реализованы»?
- 5 ответов
Ссылки между базами данных Postgresql не реализованы
Я пытаюсь создать базу данных, а затем создать в ней таблицу. Я написал запрос в файле sql для использования образа postgres, используя docker-compose.yml
Когда я использую сборку docker-compose, а затем docker-compose up, я получаю сообщение об ошибке
«psql:/docker-entrypoint-initdb.d/init.sql:18: ERROR: cross-database references are not implemented: «real_estate.public.estate» postgres | LINE 1: CREATE TABLE real_estate.public.estate («
Вот мой файл init.sql
Вы получаете эту ошибку, потому что вы не подключены к базе данных real_estate .
Я предполагаю, что вы подключены к postgres , потому что это то, что вы обычно делаете для запуска CREATE DATABASE .
Вам нужно будет разорвать существующее соединение с базой данных, а затем запустить его для вновь созданной базы данных. Только тогда вам разрешено создавать объекты в базе данных.
Это особенность, что разные базы данных строго разделены, и любой запрос на изменение, который будет отклонен.
Как это лучше всего сделать, зависит от того, как вы запускаете сценарий. Если вы запустите его с psql , подойдет простой c real_estate .
о, теперь это сработало, я добавил c real_estate после создания базы данных, и теперь в ней создана таблица, спасибо за ответ 🙂
Источник
Обсуждение: SQL Error [0A000]: ERROR: nondeterministic collations are notsupported for LIKE
SQL Error [0A000]: ERROR: nondeterministic collations are notsupported for LIKE
Re: SQL Error [0A000]: ERROR: nondeterministic collations are not supported for LIKE
Re: SQL Error [0A000]: ERROR: nondeterministic collations are notsupported for LIKE
> I have a question about nondeterministic collations in PostgreSQL 12. I
> have created a new collation that is nondeterministic and created several
> columns which use this collation. Querying these columns works great until
> I use LIKE. When I do, I get the following error:
>
> SQL Error [0A000]: ERROR: nondeterministic collations are not supported for
> LIKE
>
> Is there any plan to allow this functionality?
PostgreSQL development is conducted without a roadmap [1]. Maybe
someone will submit a patch to enable LIKE with nondeterministic
collations, but so far it did not happen according to the current set
of patches at https://commitfest.postgresql.org
Such matches can be weirder than you might think (not to
mention much slower).
Consider for instance a collation that ignores punctuation:
CREATE COLLATION «nd3alt» (
provider = ‘icu’,
locale=’und@colAlternate=shifted’,
deterministic = false
);
In the icu_ext extension, icu_strpos [2] can match a substring with
a nondeterministic collation, which is one part of what LIKE
would need to do for such collations. The implementation uses
the string search facility of the ICU library.
With the above-defined collation, we can have for instance:
SELECT icu_strpos(‘abc. . de’, ‘c,d’ COLLATE nd3alt);
icu_strpos
————
3
So even though ‘c,d’ is not a substring of ‘abc. . de’ in the common
sense, it is recognized as such by this collation, by design.
A LIKE operator for nondeterministic collations should be able to
recognize this too, but with an arbitrary number of substrings to
match in the pattern, plus it should handle the underscore wildcard
in a way that hopefully makes sense.
With the example above,
‘abc. . de’ LIKE ‘%c,d%’ COLLATE nd3alt
should certainly be a match, but in the case of this variant:
‘abc. . de’ LIKE ‘%c_d%’ COLLATE nd3alt
it’s not necessarily clear how (or even if) it should work.
Источник
Почему я получаю «ссылки между базами данных не реализованы»?
Очень простое обновление базы данных postgresql, и оно не работает. Оператор sql select в порядке и возвращает правильные значения.
Когда я добираюсь до обновления, он выдает ошибку:
Я использую vb.net и postgresql 9.2.
Все, что я хочу, это изменить поле имени, чтобы оно соответствовало описанию.
5 ответов
Если вы столкнулись с этой ошибкой в DBeaver, активация целевой базы данных может решить ее:
Замечена та же ошибка с Redshift при выполнении усечения таблицы с префиксом имени схемы.
При копировании из S3 загрузка выполнялась без имени схемы. Таким образом, таблица Truncate должна иметь тот же шаблон, который использовался в команде Copy, чтобы избежать этой ошибки в Redshift.
У меня была такая же проблема с использованием DataGrip (версия 2020.3).
В моем случае это произошло из-за того, что я изменил настройки подключения, но продолжал использовать то же окно консоли.
Я нашел 2 способа решить эту проблему:
- Изменить сеанс консоли (щелкните правой кнопкой мыши в консоли —> переключить сеанс —> новый сеанс)
- Откройте новое окно консоли
Ищите ошибки в своем журнале postgresql, чтобы увидеть, что на самом деле отправляется в базу данных. Я не знаю, как исправить ваш код, потому что я не очень хорошо знаю эту платформу. Также вам необходимо перейти к параметризованным запросам, так как ваш текущий подход будет подвержен проблемам с внедрением sql.
Однако ваша ошибка означает, что у вас есть дополнительное пространство имен. Обычное пространство имен — schema.table.column или schema.table в зависимости от контекста. Если вы попытаетесь указать таблицу как schema.table.column , она прочитает это как database.schema.table и выдаст эту ошибку. Точно так же, если у вас есть лишняя точка, вы можете случайно указать database.schema.table.column (что также вызовет ошибку).
Это одна из причин, по которой строковый SQL является действительно плохой идеей, но на самом деле не касается поверхности проблемы.
Источник
Почему я получаю «ссылки между базами данных не реализованы»?
очень простое обновление базы данных postgresql, и оно не работает. Оператор sql select в порядке и возвращает правильные значения.
Когда я добираюсь до обновления, он выдает ошибку:
Я использую vb.net и postgresql 9.2.
Все, что я хочу, это изменить поле имени, чтобы оно соответствовало описанию.
Я не знаю, является ли это вашей проблемой, но ExecuteNonQuery() в середине вашего кода не нужен для запроса SELECT — Steve
Обычно указывает на идентификатор без кавычек с более чем одной точкой, который будет интерпретироваться как db.schema.table Postgres, который вызывает указанное исключение. Я бы сразу нашел причину, посмотрев на лог-файл сервера БД где фактическое заявление о нарушении задокументировано вместе с сообщением об ошибке с настройками ведения журнала по умолчанию. — Erwin Brandstetter
@ErwinBrandstetter как str_import_date = 22.08.2013 . Конкатенация строк всегда найдет способ пнуть вас — Steve
steve — тот executenonquery был ошибкой, но не проблемой erwin — я бы согласился, но оператор select работает нормально, так что я не думаю, что это. я проверю. я отредактировал свой пост, включив в него выдержку из файла журнала. я не понимаю. — JimB
хорошо, измените sql на strSQL = «SELECT * FROM product_template where «, не повезло, получая ту же ошибку. но все еще получая возвращаемые значения для переменных. — JimB
5 ответы
Если вы столкнулись с этой ошибкой в DBeaver, активация целевой базы данных может решить ее:
Ищите ошибки в своем журнале postgresql, чтобы увидеть, что на самом деле отправляется в базу данных. Я не знаю, как исправить ваш код, потому что я не очень хорошо знаю эту платформу. Также вам необходимо перейти к параметризованным запросам, так как ваш текущий подход будет подвержен проблемам с внедрением sql.
Однако ваша ошибка означает, что у вас есть дополнительное пространство имен. Обычное пространство имен schema.table.column or schema.table в зависимости от контекста. Если вы попытаетесь указать таблицу как schema.table.column это будет читаться как database.schema.table и скиньте эту ошибку. Точно так же, если у вас есть лишняя точка, вы можете случайно указать database.schema.table.column (что также приведет к ошибке).
это одна из причин, по которой строковый SQL является действительно плохой идеей, но на самом деле не касается поверхности проблемы.
Да, это сработало для меня. Мое ошибочное пространство имен было «postgres.public.tsola_team», теперь это «public.tsola_team». — BlueScoreMan
Это решило это для меня. Это было как лишняя точка. — RTD
У меня была такая же проблема с использованием DataGrip (версия 2020.3).
В моем случае это произошло из-за того, что я изменил настройки подключения, но продолжал использовать то же окно консоли.
Я нашел 2 способа решить эту проблему:
- Изменить сеанс консоли (щелкните правой кнопкой мыши в консоли —> переключить сеанс —> новый сеанс)
- Откройте новое окно консоли
ответ дан 08 мар ’21, в 08:03
Сегодня работал над чем-то и получил это — в итоге это произошло потому, что в моем имени базы данных были заглавные буквы, а в команде — нет — prodCRT.public.tablename vs. prodcrt.public.tablename
Как только я переименовал схему в нижний регистр, все мои команды, которые работали ранее, снова заработали.
ПРИМЕЧАНИЕ: исходная база данных называлась просто «prod», поэтому все сломалось, когда я назвал ее prodCRT.
ответ дан 29 окт ’20, 13:10
Замечена та же ошибка с Redshift при выполнении усечения таблицы с префиксом имени схемы.
При копировании из S3 загрузка выполнялась без имени схемы. Таким образом, таблица Truncate должна иметь тот же шаблон, который использовался в команде Copy, чтобы избежать этой ошибки в Redshift.
Источник
Почему я получаю «ссылки между базами данных не реализованы»?
Очень простое обновление базы данных postgresql, и оно не работает. Оператор sql select в порядке и возвращает правильные значения.
Когда я добираюсь до обновления, он выдает ошибку:
Я использую vb.net и postgresql 9.2.
Все, что я хочу, это изменить поле имени, чтобы оно соответствовало описанию.
5 ответов
Если вы столкнулись с этой ошибкой в DBeaver, активация целевой базы данных может решить ее:
Замечена та же ошибка с Redshift при выполнении усечения таблицы с префиксом имени схемы.
При копировании из S3 загрузка выполнялась без имени схемы. Таким образом, таблица Truncate должна иметь тот же шаблон, который использовался в команде Copy, чтобы избежать этой ошибки в Redshift.
У меня была такая же проблема с использованием DataGrip (версия 2020.3).
В моем случае это произошло из-за того, что я изменил настройки подключения, но продолжал использовать то же окно консоли.
Я нашел 2 способа решить эту проблему:
- Изменить сеанс консоли (щелкните правой кнопкой мыши в консоли —> переключить сеанс —> новый сеанс)
- Откройте новое окно консоли
Ищите ошибки в своем журнале postgresql, чтобы увидеть, что на самом деле отправляется в базу данных. Я не знаю, как исправить ваш код, потому что я не очень хорошо знаю эту платформу. Также вам необходимо перейти к параметризованным запросам, так как ваш текущий подход будет подвержен проблемам с внедрением sql.
Однако ваша ошибка означает, что у вас есть дополнительное пространство имен. Обычное пространство имен — schema.table.column или schema.table в зависимости от контекста. Если вы попытаетесь указать таблицу как schema.table.column , она прочитает это как database.schema.table и выдаст эту ошибку. Точно так же, если у вас есть лишняя точка, вы можете случайно указать database.schema.table.column (что также вызовет ошибку).
Это одна из причин, по которой строковый SQL является действительно плохой идеей, но на самом деле не касается поверхности проблемы.
Источник
очень простое обновление базы данных postgresql, и оно не работает. Оператор sql select в порядке и возвращает правильные значения.
Когда я добираюсь до обновления, он выдает ошибку:
{"ERROR [0A000] ERROR: cross-database references are not implemented: "openerp.public.product_template"; Error while executing the query"}.
Я использую vb.net и postgresql 9.2.
Все, что я хочу, это изменить поле имени, чтобы оно соответствовало описанию.
log:
LOG 0 duration: 34.000 ms statement: SELECT * FROM product_template where import_date = '08/22/2013'
LOG 0 duration: 11.000 ms statement: select n.nspname, c.relname, a.attname, a.atttypid, t.typname, a.attnum, a.attlen, a.atttypmod, a.attnotnull, c.relhasrules, c.relkind, c.oid, d.adsrc from (((pg_catalog.pg_class c inner join pg_catalog.pg_namespace n on n.oid = c.relnamespace and c.oid = 20496) inner join pg_catalog.pg_attribute a on (not a.attisdropped) and a.attnum > 0 and a.attrelid = c.oid) inner join pg_catalog.pg_type t on t.oid = a.atttypid) left outer join pg_attrdef d on a.atthasdef and d.adrelid = a.attrelid and d.adnum = a.attnum order by n.nspname, c.relname, attnum
LOG 0 duration: 12.000 ms parse _PLAN000000001D2CFB60: SELECT * FROM product_template where import_date = '08/22/2013'
LOG 0 duration: 11.000 ms statement: select ta.attname, ia.attnum, ic.relname, n.nspname, tc.relname from pg_catalog.pg_attribute ta, pg_catalog.pg_attribute ia, pg_catalog.pg_class tc, pg_catalog.pg_index i, pg_catalog.pg_namespace n, pg_catalog.pg_class ic where tc.oid = 20496 AND tc.oid = i.indrelid AND n.oid = tc.relnamespace AND i.indisprimary = 't' AND ia.attrelid = i.indexrelid AND ta.attrelid = i.indrelid AND ta.attnum = i.indkey[ia.attnum-1] AND (NOT ta.attisdropped) AND (NOT ia.attisdropped) AND ic.oid = i.indexrelid order by ia.attnum
LOG 0 duration: 0.000 ms statement: select current_schema()
LOG 0 duration: 1.000 ms statement: select c.relhasrules, c.relkind, c.relhasoids from pg_catalog.pg_namespace u, pg_catalog.pg_class c where u.oid = c.relnamespace and c.relname = 'product_template' and u.nspname = 'public'
LOG 0 duration: 1.000 ms statement: select c.relhasrules, c.relkind, c.relhasoids from pg_catalog.pg_namespace u, pg_catalog.pg_class c where u.oid = c.relnamespace and c.relname = 'product_template' and u.nspname = 'public'
ERROR 0A000 cross-database references are not implemented: "openerp.public.product_template"
Код:
Private Sub btnChgNameToDescr_Click(sender As Object, e As EventArgs) Handles btnChgNameToDescr.Click
Dim objConn As New System.Data.Odbc.OdbcConnection
Dim objCmd As New System.Data.Odbc.OdbcCommand
Dim dtAdapter As New System.Data.Odbc.OdbcDataAdapter
Dim ds As New DataSet
Me.Cursor = System.Windows.Forms.Cursors.WaitCursor
Dim strConnString As String
Dim strSQL As String
Dim iRecCount As Integer
Me.Cursor = System.Windows.Forms.Cursors.WaitCursor
If objConn.State = ConnectionState.Open Then
'do nothing
Else
strConnString = "Dsn=PostgreSQL35W;database=OpenERP;server=localhost;port=5432;uid=openpg;pwd=openpgpwd"
objConn.ConnectionString = strConnString
objConn.Open()
End If
If Me.txtImportDate.Text = "" Then
MsgBox("Import Date field cannot be blank.")
Exit Sub
End If
Dim str_import_date As String = Me.txtImportDate.Text
strSQL = "SELECT * FROM product_template where import_date = " & "'" & str_import_date & "'"
dtAdapter.SelectCommand = objCmd
With objCmd
.Connection = objConn
.CommandText = strSQL
.CommandType = CommandType.Text
.ExecuteNonQuery()
dtAdapter.Fill(ds, "product_template")
iRecCount = ds.Tables("product_template").Rows.Count
End With
If iRecCount = 0 Then
MsgBox("No records found.")
Me.Cursor = System.Windows.Forms.Cursors.Default
Exit Sub
End If
Dim cb As New Odbc.OdbcCommandBuilder(dtAdapter)
'change the name field to item_description
With ds
For i As Integer = 0 To .Tables("product_template").Rows.Count - 1
'this works, returns a string
Dim str_default_code As String = (.Tables(0).Rows(i).Item("name").ToString)
'this works
Dim str_item_description As String = (.Tables(0).Rows(i).Item("description").ToString)
.Tables("product_template").Rows(i).Item("name") = str_item_description
'setting the variable doesn't work either - Dim str_item_description As String = "BH LITE BRT"
'this throws the error
dtAdapter.Update(ds, "product_template")
Next
End With
Me.Cursor = System.Windows.Forms.Cursors.Default
End Sub
Я пытаюсь преобразовать запрос внутреннего соединения SQL в запрос внутреннего соединения PostgreSQL. В этом запросе внутреннего соединения, какие таблицы используют, не все таблицы присутствуют в одной базе данных. мы разделили таблицы на две базы данных, то есть базу данных приложений и базу данных безопасности.
- пользователи и таблица разрешений присутствуют в базе данных безопасности
- сопоставление ролей пользователя и отдел присутствуют в базе данных приложения
Я пробовал, как показано ниже, но получаю следующую ошибку
Ошибка
ERROR: cross-database references are not implemented: "Rockefeller_ApplicationDb.public.userrolemapping"
LINE 4: INNER JOIN "Rockefeller_ApplicationDb".public.userro..
Сохраненная функция SQL
SELECT Department.nDeptID
FROM Users INNER JOIN Permission
ON Users.nUserID = Permission.nUserID INNER JOIN UserRoleMapping
ON Users.nUserID = UserRoleMapping.nUserID INNER JOIN Department
ON Permission.nDeptInst = Department.nInstID
AND Department.nInstID = 60
WHERE
Users.nUserID = 3;
Сохраненная функция PostgreSQL
SELECT dep.ndept_id
FROM "Rockefeller_SecurityDb".public.users as u
INNER JOIN "Rockefeller_SecurityDb".public.permissions p ON u.nuser_id = p.nuser_id
INNER JOIN "Rockefeller_ApplicationDb".public.userrolemapping as urm ON u.nuser_id = urm.nuser_id
INNER JOIN "Rockefeller_ApplicationDb".public.department dep ON p.ndept_inst = dep.ninst_id
AND dep.ninst_id = 60
WHERE
u.nuser_id = 3;
4 ответа
Вы не можете соединять таблицы из разных баз данных.
Базы данных логически разделены в PostgreSQL.
Если вы хотите соединить таблицы, вы должны поместить их в разные схемы в одной базе данных, а не в разные базы данных.
Обратите внимание, что то, что называется «базой данных» в MySQL, называется «схемой» в стандартном SQL.
Если вам действительно нужно объединить таблицы из разных баз данных, вам нужно использовать стороннюю оболочку данных.
29
Laurenz Albe
8 Янв 2019 в 10:09
Для будущих поисков вы можете использовать dblink для подключения к другой базе данных.
Следуйте командам:
create extension dblink;
SELECT dblink_connect('otherdb','host=localhost port=5432 dbname=otherdb user=postgres password=???? options=-csearch_path=');
SELECT * FROM dblink('otherdb', 'select field1, field2 from public.tablex')
AS t(field1 text, field2 text);
6
rafaelnaskar
22 Июл 2020 в 14:58
У меня была такая же проблема с Postgres и JpaRepo, и я просто удалил dbname.public
из запроса.
0
Krizsán Balazs
19 Авг 2021 в 19:43
Новичок в postrgreSQL, и у меня было такое же требование. FOREIGN DATA WRAPPER сделал свое дело.
IMPORT FOREIGN SCHEMA — импорт определений таблиц с внешнего сервера.
Но сначала мне нужно было:
-
включить расширение fdw
-
определить внешний сервер (который в данном случае был лока-хостом!)
-
создать сопоставление между локальным пользователем и внешним пользователем.
CREATE EXTENSION postgres_fdw;
CREATE SERVER localsrv
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host 'localhost', dbname 'otherdb', port '5432');
CREATE USER MAPPING FOR <local_user>
SERVER localsrv
OPTIONS (user 'ohterdb_user', password 'ohterdb_user_password');
IMPORT FOREIGN SCHEMA public
FROM SERVER localsrv
INTO public;
После этого я мог использовать чужие таблицы, как если бы они были локальными. Затрат на производительность я не заметил.
0
Jeremy Caney
7 Дек 2021 в 03:33