我对PostgreSQL的这个恼人的消息感到困惑。我可以通过ODBC正确连接到服务器,但是任何尝试运行公共选择查询都会产生一条消息"无效的对象名称' some_view'" (其中“some_view'是我应该能够读取数据的视图”)。有趣的是,这个查询在通过pgAdmin执行时工作正常。
[编辑]
该项目在MFC。我使用CRecordset
。已经尝试使用选项CRecordset::executeDirect
和CRecordset::noDirtyFieldCheck
,但没有成功。
似乎问题是由MFC和/或CRecordset
类引起的。当我尝试使用与.NET应用程序相同的DSN连接并执行相同的查询时,一切正常。
[EDIT2] 我粘贴了Postgres日志的内容:
1)MFC app:
[0.000]conn=05E711F8, PGAPI_DriverConnect( in)='DSN=mpk_local;UID=my_uid;PWD=my_pwd;', fDriverCompletion=1
[0.000]DSN info: DSN='mpk_local',server='localhost',port='5432',dbase='MPK_SQL',user='my_uid',passwd='xxxxx'
[0.000] onlyread='0',protocol='7.4',showoid='1',fakeoidindex='0',showsystable='0'
[0.016] conn_settings='(null)', conn_encoding='(null)'
[0.016] translation_dll='',translation_option=''
[0.016]Driver Version='09.03.0400,Oct 26 2014' linking 1600 dynamic Multithread library
[0.016]Global Options: fetch=100, socket=4096, unknown_sizes=0, max_varchar_size=255, max_longvarchar_size=8190
[0.016] disable_optimizer=0, ksqo=1, unique_index=1, use_declarefetch=0
[0.016] text_as_longvarchar=1, unknowns_as_longvarchar=0, bools_as_char=1 NAMEDATALEN=64
[0.016] extra_systable_prefixes='dd_;', conn_settings='(null)' conn_encoding=''
[0.047] [ PostgreSQL version string = '9.3.5' ]
[0.047] [ PostgreSQL version number = '9.3' ]
[0.047]conn=05E711F8, query='select oid, typbasetype from pg_type where typname = 'lo''
[0.047] [ fetched 0 rows ]
[0.047] [ Large Object oid = -999 ]
[0.047] [ Client encoding = 'WIN1250' (code = 29) ]
[0.047]conn=05E711F8, PGAPI_DriverConnect(out)='DSN=mpk_local;DATABASE=MPK_SQL;SERVER=localhost;PORT=5432;UID=my_uid;PWD=my_pwd;SSLmode=disable;ReadOnly=0;Protocol=7.4-1;FakeOidIndex=0;ShowOidColumn=1;RowVersioning=0;ShowSystemTables=0;ConnSettings=;Fetch=100;Socket=4096;UnknownSizes=0;MaxVarcharSize=255;MaxLongVarcharSize=8190;Debug=0;CommLog=1;Optimizer=0;Ksqo=1;UseDeclareFetch=0;TextAsLongVarchar=1;UnknownsAsLongVarchar=0;BoolsAsChar=1;Parse=1;CancelAsFreeStmt=0;ExtraSysTablePrefixes=dd_;;LFConversion=1;UpdatableCursors=1;DisallowPremature=0;TrueIsMinus1=0;BI=0;ByteaAsLongVarBinary=0;UseServerSidePrepare=1;LowerCaseIdentifier=0;GssAuthUseGSS=0;XaOpt=1'
[0.821]conn=05E711F8, PGAPI_Disconnect
2).NET app
[0.000]conn=062D3F08, PGAPI_DriverConnect( in)='DSN=mpk_local;UID=my_uid;PWD=my_pwd;', fDriverCompletion=0
[0.016]DSN info: DSN='mpk_local',server='localhost',port='5432',dbase='MPK_SQL',user='my_uid',passwd='xxxxx'
[0.016] onlyread='0',protocol='7.4',showoid='1',fakeoidindex='0',showsystable='0'
[0.016] conn_settings='(null)', conn_encoding='(null)'
[0.016] translation_dll='',translation_option=''
[0.016]Driver Version='09.03.0400,Oct 26 2014' linking 1600 dynamic Multithread library
[0.016]Global Options: fetch=100, socket=4096, unknown_sizes=0, max_varchar_size=255, max_longvarchar_size=8190
[0.016] disable_optimizer=0, ksqo=1, unique_index=1, use_declarefetch=0
[0.016] text_as_longvarchar=1, unknowns_as_longvarchar=0, bools_as_char=1 NAMEDATALEN=64
[0.016] extra_systable_prefixes='dd_;', conn_settings='(null)' conn_encoding=''
[0.047] [ PostgreSQL version string = '9.3.5' ]
[0.047] [ PostgreSQL version number = '9.3' ]
[0.047]conn=062D3F08, query='select oid, typbasetype from pg_type where typname = 'lo''
[0.047] [ fetched 0 rows ]
[0.047] [ Large Object oid = -999 ]
[0.047] [ Client encoding = 'WIN1250' (code = 29) ]
[0.063]conn=062D3F08, query='SELECT line_id, name FROM comm_lines_v ORDER BY name'
[0.063] [ fetched 5 rows ]
[0.063]conn=062D3F08, query='select current_schema()'
[0.063] [ fetched 1 rows ]
[0.063]conn=062D3F08, query='select nspname from pg_namespace n, pg_class c where c.relnamespace=n.oid and c.oid='"comm_lines_v"'::regclass'
[0.063] [ fetched 1 rows ]
[0.063]conn=062D3F08, query='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, pg_get_expr(d.adbin, d.adrelid), case t.typtype when 'd' then t.typbasetype else 0 end, t.typtypmod, c.relhasoids from (((pg_catalog.pg_class c inner join pg_catalog.pg_namespace n on n.oid = c.relnamespace and c.relname = 'comm_lines_v' and n.nspname = 'public') 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'
[0.078] [ fetched 2 rows ]
[0.078]PGAPI_Columns: table='comm_lines_v',field_name='line_id',type=23,name='int4'
[0.078]PGAPI_Columns: table='comm_lines_v',field_name='name',type=1043,name='varchar'
[1.451]conn=062D3F08, PGAPI_Disconnect
有问题的查询:
SELECT * FROM some_view
感谢您的帮助。