簡體   English   中英

Postgresql與Npgsql“的關系 <tablename> 不存在。“只發生在Win 7上

[英]Postgresql with Npgsql “relation <tablename> does not exist.” Only occurring on Win 7

在.NET 3.5中使用Npgsql(2.0.11和2.0.11.94)DLL使用Postgresql時,我遇到了一個非常奇怪的錯誤。

我創建了一個程序來運行這兩個查詢(這些查詢直接從程序輸出中復制):

INSERT INTO "db_events" VALUES ('2','1','2','1', to_timestamp('2012/08/27 10:22:43', 'YYYY/MM/DD HH24:MI:SS'),'2012', '8', '27', '10', '22', '43', '35' );

INSERT INTO "db_events_counts" VALUES ('1','2', '0', '1', '0', '1' );

這個程序將在Windows XP x86上完美運行,同時具有postdres 8.4.12和9.0.9,並將數據輸入到表中。

但是,當在Windows 7上運行完全相同的程序時,如果數據庫的設置方式與Windows XP數據庫完全相同,則會遇到錯誤:

ERROR: 42P01: relation "db_events" does not exist

我已經讀過這個錯誤是因為postgres強制表名為小寫,這很好,因為它們已經存在。 或者用引號創建的表必須用引號引用,這也很好,因為我使用引號。

在windows 7數據庫中,如果我將這兩個查詢復制並粘貼到pgadmin中,它們工作正常,沒有錯誤,這讓我相信它與DLL有關嗎?

沒有意義的是這個程序在我的Windows XP系統上運行bug,同時在Windows 7上不斷拋出這個錯誤。

我也嘗試了一個簡單的刪除聲明:

DELETE FROM "db_events"; DELETE FROM "db_events_counts";

但這也以同樣的錯誤結束。

有什么我想念的嗎? Npgsql是否需要在運行時在相同的Windows環境中編譯? 或者Windows 7和Windows XP之間是否存在一些微妙的區別,而且我沒有得到postgres。

任何有關該主題的幫助或信息將不勝感激。


由於有關連接的問題,這是我嘗試過的:

Server=localhost;Port=5433;User Id=databaseuser;Password=databaseuser_123;Database=db123;
Server=127.0.0.1;Port=5433;User Id=databaseuser;Password=databaseuser_123;Database=db123;
Server=10.223.132.123;Port=5433;User Id=databaseuser;Password=databaseuser_123;Database=db123;

最后一個是本地機器的IP地址。


以下是在Win 7上連接和斷開服務器程序的簡短日志:
//連接

2012-08-27 11:26:00 EST ERROR:  relation "db_events" does not exist at character 13
2012-08-27 11:26:00 EST STATEMENT:  DELETE FROM "db_events"; DELETE FROM "db_events_counts";
2012-08-27 12:52:29 EST ERROR:  relation "db_events" does not exist at character 13
2012-08-27 12:52:29 EST STATEMENT:  INSERT INTO "db_events" VALUES ('114','1','2','1', to_timestamp('2012/08/27 12:52:29', 'YYYY/MM/DD HH24:MI:SS'),'2012', '8', '27', '12', '52', '29', '35' );

//斷開連接

2012-08-27 11:26:07 EST LOG:  could not receive data from client: No connection could be made because the target machine actively refused it.
2012-08-27 11:26:07 EST LOG:  unexpected EOF on client connection

奇怪和反常行為在這里看到,和討論中的意見,建議,系統目錄(在pg_catalog模式)may've直接修改-也許試圖REVOKE一些權限。

那不是個好主意。 系統目錄應該只由專家修改。 這只是超級用戶帳戶可以直接修改它們的原因之一,也是您不應在日常操作中使用超級用戶帳戶的眾多原因之一。

除非你確切地知道做了什么並且可以撤消它,否則我建議你恢復數據庫的工作副本,就像你已知良好的XP機器上那樣。 GRANT荷蘭國際集團獲得publicpg_catalog聽起來像它的幫助下,但誰知道還有什么已經完成。

如果這是我的數據庫,我會使用每個數據庫的pg_dump和一個pg_dumpall --globals-only並將其恢復到備用數據庫以確保它看起來完整。 我然后停止Pg並重新initdb。 不過,這對Windows來說有點痛苦,所以你可能只需備份損壞的數據庫, DROP ping它,重新創建它並將數據恢復到它中就可以了。

在CraigRinger的幫助下計算出來。

即使我登錄的用戶是數據庫的所有者,他也沒有權限查看公共模式下的任何內容。

這被發現使用:
select * from public.db_events

其中,而不是拋出relation not found錯誤,拋出access is denied錯誤。

更改用戶后,我登錄superuser並勾選“角色權限”下的所有復選框, relation not found錯誤錯誤。

PostgreSQL將所有標識符折疊為小寫。 這是PostgreSQL的行為,與Npgsql無關 - 后者只是在編寫時傳遞你的SQL。 您可以切換到全小寫表名,在這種情況下,您不再需要引號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM