powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / could not open relation x/x/x: Invalid argument
10 сообщений из 10, страница 1 из 1
could not open relation x/x/x: Invalid argument
    #34000355
SUKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, столкнулся вот с такой проблемой:
Клиент и база на одной машине Win2000 сп4 рус. Постгрес:
PostgreSQL 8.1.4 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2 (mingw-special)
Есть приложение (несколько нитей, в каждой свой коннект), каждая нитка отсылает одинаковые запросы в базу (libpq через PQprepare/PQexecPrepared и PQexec). Запросы повторяются, всего их 19 штук и крутятся по кругу в каждой нитке. Так вот если количество нитей > 1, то время от времени возникает такая ошибка:
could not open relation x/x/x: Invalid argument (с разными значениями вместо х). Причем может вылезти на любом запросе и не важно на PQexec или PQprepare, в качестве релейшена в ошибке выступает либо таблица из запроса, либо ее индекс, работает, работает а потом хоп - ошибка :( потом опять все ок и т.д. - рандом полный :( Если нитка одна, то все ок. Получив полную информацию об ошибке, оказалось, что это ф-ия mdopen, строка 364, смотрю туда:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
static MdfdVec * mdopen(SMgrRelation reln, bool allowNotFound)
{
	MdfdVec    *mdfd;
	char	   *path;
	File		fd;

	/* No work if already open */
	if (reln->md_fd)
		return reln->md_fd;

	path = relpath(reln->smgr_rnode);

	fd = PathNameOpenFile(path, O_RDWR | PG_BINARY,  0600 );

	if (fd <  0 )
	{
		/*
		 * During bootstrap, there are cases where a system relation will be
		 * accessed (by internal backend processes) before the bootstrap
		 * script nominally creates it.  Therefore, accept mdopen() as a
		 * substitute for mdcreate() in bootstrap mode only. (See mdcreate)
		 */
		if (IsBootstrapProcessingMode())
			fd = PathNameOpenFile(path, O_RDWR | O_CREAT | O_EXCL | PG_BINARY,  0600 );
		if (fd <  0 )
		{
			pfree(path);
			if (allowNotFound && errno == ENOENT)
				return NULL;
			ereport(ERROR,
					(errcode_for_file_access(),
					 errmsg("could not open relation %u/%u/%u: %m",
							reln->smgr_rnode.spcNode,
							reln->smgr_rnode.dbNode,
							reln->smgr_rnode.relNode)));
		}
	}

	pfree(path);
...........................................................................................
Получается что засада в синхронизации запросов постгресом? У кого-ть есть соображения на это счет? Или надо синхронизировать нити на момент не допускания посылки одновременных запросов (если так, то как он вообще работает тогда :))????
...
Рейтинг: 0 / 0
could not open relation x/x/x: Invalid argument
    #34000519
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SUKER...Получается что засада в синхронизации запросов постгресом? У кого-ть есть соображения на это счет? Или надо синхронизировать нити на момент не допускания посылки одновременных запросов (если так, то как он вообще работает тогда :))????

на каждый коннект к постгрессу создаёться отдельный процесс(форточки) где и обрабатываються Ваши запросы. Думаю, что Вы юзаете ОДИН коннекшен к базе - отсюда и траблы... Либо в каждом потоке открывайте по коннекшенну...Либо обеспечьте ОДИН коннект в ОДНОЙ нитке и гоните всё через неё последовательно...


с уважением
(круглый)
...
Рейтинг: 0 / 0
could not open relation x/x/x: Invalid argument
    #34000642
SUKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kolobok0на каждый коннект к постгрессу создаёться отдельный процесс(форточки) где и обрабатываються Ваши запросы. Думаю, что Вы юзаете ОДИН коннекшен к базе - отсюда и траблы... Либо в каждом потоке открывайте по коннекшенну...Либо обеспечьте ОДИН коннект в ОДНОЙ нитке и гоните всё через неё последовательно...
Спасибо, но я же написал: SUKER(несколько нитей, в каждой свой коннект и это 100%. Дальнейшие изыскания проблемы привели к следующим результатам:
1) Если конектиться к удаленному серверу: линух + постгрес 7.4, то все работает на ура - без ошибок.
2) Если коннектится к удаленному серверу: виндовсХП сп2 + постгрес 8.1.4, то тоже самое что и у меня локально - периодически возникают вышеописанные ошибки :(

Есть еще мнения?
...
Рейтинг: 0 / 0
could not open relation x/x/x: Invalid argument
    #34000751
Andrew Sagulin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SUKERЕсть еще мнения?

По идее постгресу должно быть всё равно, из потоков к нему обращаются или из отдельных приложений. Можно попробовать запустить все эти потоки как отдельные приложения, чтобы отделить потенциально возможное влияние многопоточности.
...
Рейтинг: 0 / 0
could not open relation x/x/x: Invalid argument
    #34000821
SUKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andrew SagulinПо идее постгресу должно быть всё равно, из потоков к нему обращаются или из отдельных приложений. Можно попробовать запустить все эти потоки как отдельные приложения, чтобы отделить потенциально возможное влияние многопоточности.

Я думаю ему и есть все равно - ошибка будет и в том и в том случае, вот только времени рыть в этом направлении у меня нет :( Боюсь, что осталось выяснить: это глюк восьмерки как таковой (сильно сомневаюсь), или же это глюк 8-ки под виндой....
...
Рейтинг: 0 / 0
could not open relation x/x/x: Invalid argument
    #34001773
Andrew Sagulin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если это бага PG 8 под Windows, связанная с race conditions, то она должна была бы выплывать при любой многопользовательской работе, а здесь этого не слышно (мало юзают 8-ку под Windows?).
Нет, а всё-таки, сложно скомпилировать Ваше приложение для работы с одним потоком и запустить пару десятков экземпляров приложения?
А то, если это стопроцентно баг PG, можно отослать багрепорт разработчкам...
...
Рейтинг: 0 / 0
could not open relation x/x/x: Invalid argument
    #34001896
SUKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andrew SagulinЕсли это бага PG 8 под Windows, связанная с race conditions, то она должна была бы выплывать при любой многопользовательской работе, а здесь этого не слышно (мало юзают 8-ку под Windows?).
Нет, а всё-таки, сложно скомпилировать Ваше приложение для работы с одним потоком и запустить пару десятков экземпляров приложения?
А то, если это стопроцентно баг PG, можно отослать багрепорт разработчкам...

Скопилял - достаточно двух приложений :) В нете подобные сообщения встечаются, но на них либо не отвечают, либо у одного, например, решилось исключением папки постгреса из сканируемых антивирусом (у меня не помогло)... Видимо действительно мало у кого сервер на винде + чтобы одинаковые запросы часто одновременно приходили :)
Ставлю федору на виртул машину, пихну туда восьмерку и проверю... НО судя по сорсам данная область не сильно изминилась по сравнению с 7.4 так что думаю дело именно в винде :(
...
Рейтинг: 0 / 0
could not open relation x/x/x: Invalid argument
    #34002929
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SUKER...Скопилял - достаточно двух приложений :) В нете подобные сообщения встечаются, но на них либо не отвечают, либо у одного, например, решилось исключением папки постгреса из сканируемых антивирусом (у меня не помогло)... Видимо действительно мало у кого сервер на винде + чтобы одинаковые запросы часто одновременно приходили :)
Ставлю федору на виртул машину, пихну туда восьмерку и проверю... НО судя по сорсам данная область не сильно изминилась по сравнению с 7.4 так что думаю дело именно в винде :(

8 сервак на форточках...
клиенты коннектяться...гоняли более двух... монстроподобный функционал в виде хранимок на си плас плас (рекурсии, маленькая кучка таблиц, различные типы, мэнеджэт-анмэнеджэт)..описанных проблем не обнаружено...


(круглый)
...
Рейтинг: 0 / 0
could not open relation x/x/x: Invalid argument
    #34002971
SUKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kolobok08 сервак на форточках...
клиенты коннектяться...гоняли более двух... монстроподобный функционал в виде хранимок на си плас плас (рекурсии, маленькая кучка таблиц, различные типы, мэнеджэт-анмэнеджэт)..описанных проблем не обнаружено...
(круглый)

Хм, ну если бы я для тестов в нитках запросы в цикл не загнал, то тоже может и не заметил бы (кстати вспомнил что подомная ошика уже один раз проскакивала на другом приложении стороннего разработчика, но тогда я на нее не обратил внимания). Ща уже фидора поставилась - протестю :) А так впринципе можно будет написать тестовую программульку чтобы запускала две нитки и крутила там запрос в цикле...
...
Рейтинг: 0 / 0
could not open relation x/x/x: Invalid argument
    #34006182
SUKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Протестил на федоре:
с PostgreSQL 8.1.3 on i386-redhat-linux-gnu, compiled by GCC i386-redhat-linux-gcc (GCC) 4.1.0 20060210 (Red Hat 4.1.0-0.24)

опять же никаких проблем....

Если будет время, накатаю быденький тест...
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / could not open relation x/x/x: Invalid argument
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]