LINUX.ORG.RU

Помогите с добавлением файла в DB PQ


0

0

Конечно понимаю, что код кривой, но как умеем, так и пишим. Проблемма в том, что при добавлении файла, (запрос DPRINT("File %s\n", pquer); выдает нормальный, PostgreSQL отдает то что все олично запрошенно, но почему то сама запись не добавляется. Причем если написать в psql
INSERT INTO files ("B_file", "Name" VALUES ('pivo.txt', 'rules')
То запись добавляется.
Выложил всю функцию, для того, мож за одно что нить покртикуете.

int DB_PutFile(char* name)
{
	DPRINT("Connect: %i\nStatus: %i\n",ConnectDB(),DB_Get_Status() );
	int lenf = strlen(name);
	
	while(name[--lenf] != '\\' && name[lenf] != '/');
	char* file_name = &name[++lenf];
	DPRINT("File path: %s\n File name: %s\n", name, file_name);
	
	char* pqfile;
	int pqlen;
	DPRINT("RUN DB_PutFile\n",1);
	int fd;
	int len;
	
	if((fd = open(name, O_RDONLY, NULL))<0)
	{
		fprintf(stderr, "%s: cannot open for writing: \n", name);
		return 0;
	}else{
		DPRINT("File: %s openned\n", name);
		len = lseek(fd,0,SEEK_END);
		lseek(fd, 0, SEEK_SET);
		char* buffer = (char*) malloc(sizeof(char)*len);
		while(read(fd, buffer + lseek(fd,0,SEEK_CUR), len));
		pqfile = PQescapeBytea(buffer, len, &pqlen);
		free(buffer);
		DPRINT("Malloc: %i\n", pqlen+200);
		char* pquer = malloc(pqlen+200);
		DPRINT("Filename: %s\n", file_name);
		sprintf(pquer, "INSERT INTO files (\"B_file\", \"Name\") "
					   "VALUES ('%s', '%s')", pqfile, file_name);
		DPRINT("File %s\n", pquer);
		Result = PQexec(nom_database, request);
		
		
		if(!Test_request(Result))
		 {	 
			DPRINT("Respons: %s\n", PQgetvalue(Result, 0, 0));
			sprintf(pquer, "SELECT \"ID_files\" "
			 			   "FROM files "
			 			   "WHERE \"B_file\"='%s' "
						   " AND \"Name\"='%s'", pqfile, file_name);
			Result = PQexec(nom_database, request);
			free(pquer);
			if(!Test_request(Result))					
				return atoi(PQgetvalue(Result, 0, 0));
			return -1;
		 }
		return -2;
		
	}
return -3;			
}
★★

я точно не знаю, но вроде для загрузки в БД файлов есть в PQ специальные средства (что-то вроде lo_import (...), Large Objects), а esc'пить большие файлы, потом вставлять инсертом как-то не очень, imho.

jackLucas
()
Ответ на: комментарий от jackLucas

>я точно не знаю, но вроде для загрузки в БД файлов есть в PQ >специальные средства (что-то вроде lo_import (...), Large Objects), а >esc'пить большие файлы, потом вставлять инсертом как-то не очень, >imho.

Есть такая тема, но проблеммы 2-е 1-ая в том, что тада дампить эти данные не удобно. 2-ая, что не хватает IQ что бы разобраться, как указатель int64 перевести в формат, который кушает PQ.

ASM ★★
() автор топика
Ответ на: комментарий от Ex

> use snprintf дабы избежать переполнение буффера

Хоть и не помогает моей проблемме, но спасибо, буду иметь введу что такая штуковина есть.

ASM ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.