- oracle_fdw;
- postgres_fdw;
- firebird_fdw.
- oracle_fdw;
- postgres_fdw;
- firebird_fdw.
Описание проблемы:
Выполнение python-кода:
import fdb
con = fdb.connect(dsn='127.0.0.1/3050:base.fdb', user='SYSDBA', password='masterkey', charset='WIN1251')
прерывается ошибкой:
Traceback (most recent call last):
File "try.py", line 4, in <module>
con = fdb.connect(dsn='127.0.0.1/3050:base.fdb', user='SYSDBA', password='masterkey')
File "C:\python38-32\\lib\site-packages\fdb\fbcore.py", line 800, in connect
load_api(fb_library_name)
File "C:\python38-32\\lib\site-packages\fdb\fbcore.py", line 231, in load_api
setattr(sys.modules[__name__], 'api', ibase.fbclient_API(fb_library_name))
File "C:\python38-32\\lib\site-packages\fdb\ibase.py", line 1385, in __init__
raise Exception("The location of Firebird Client Library could not be determined.")
Exception: The location of Firebird Client Library could not be determined.
Решение:
Создаем строковый параметр, который указан в строках немногим выше той, что указана в этой строке стека ошибки:
File "C:\python38-32\\lib\site-packages\fdb\ibase.py", line 1385, in __init__
например, "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Firebird Project\Firebird Server\Instances\DefaultInstance" с путем до программной папки Firebird, например, "C:\firebird\3.0.6.33328-0_x64\".
Создаем папку "C:\firebird\3.0.6.33328-0_x64\bin\".
Копируем туда "C:\firebird\3.0.6.33328-0_x64\bin\fbclient.dll" разрядности "x32".
<tomcat>\webapps\test_app\index.jsp
<%@page import="java.sql.*" %>
<%Class.forName("org.firebirdsql.jdbc.FBDriver"); %>
<HTML>
<HEAD>
<TITLE>Database access through JSP</TITLE>
</HEAD>
<BODY>
<H1>Result of select query</H1>
<%
Connection connection = DriverManager.getConnection(
"jdbc:firebirdsql:dbserver/3255:c:/data/base.fdb",
"SYSDBA",
"masterkey");
Statement statement = connection.createStatement();
ResultSet resultset = statement.executeQuery("select id, name from user order by id asc");
%>
<TABLE BORDER="1">
<TR>
<TH>id</TH>
<TH>name</TH>
</TR>
<% while(resultset.next()){ %>
<TR>
<TD> <%= resultset.getString(1) %></TD>
<TD> <%= resultset.getString(2) %></TD>
</TR>
<% } %>
</TABLE>
</BODY>
</HTML>
/opt/firebird/bin/gbak -user SYSDBA -password masterkey -b -v -g -Y backup_$1.log localhost/3050:`pwd`/$1 $1.FBK
/opt/firebird/bin/gbak -user SYSDBA -password masterkey -R -c -V -P 16384 -Y restore_$1.log $1 localhost/3050:`pwd`/R_$1.fdb
Фев 04, 2018 5:18:52 PM org.firebirdsql.logging.JulLogger warn
WARNING: WARNING: No connection character set specified (property lc_ctype, encoding, charSet or localEncoding), defaulting to character set NONE
jdbc:firebirdsql:url:db?encoding=ISO8859_1- либо:
Properties connInfo = new Properties();
connInfo.put("user", username);
connInfo.put("password", password);
connInfo.put("charSet", "Cp1251");
Connection db = DriverManager.getConnection(dataurl, connInfo);
select 'select * from (' as STMT1 from dual union all
select
'select '''||c.table_name||'.'||cc.column_name||''' as TBLCOL, count(*) as CNT from '
||c.table_name
||' t where t.'||cc.column_name||' in (123456789) union all'
from user_constraints c
join user_cons_columns cc on cc.constraint_name = c.constraint_name
where c.r_constraint_name='PK_ESTIMATE'
union all select ') where CNT <> 0' from dual
;
select 'select * from (' as STMT1 from rdb$database union all
select
/*
cc.rdb$index_name as CONSTRAINT_NAME
,trim(c.rdb$relation_name) as TABLE_NAME
,trim(cc.rdb$field_name) as COLUMN_NAME
,trim(c2c.rdb$field_name) as COLUMN_NAME2
,c.rdb$foreign_key as R_CONSTRAINT_NAME
,trim(cci.rdb$relation_name) as R_TABLE_NAME
,trim(ccs.rdb$field_name) as R_COLUMN_NAME
,trim(c.rdb$relation_name)||'.'||trim(cc.rdb$field_name) as TBL_COL
*/
'select '''||trim(c.rdb$relation_name)||'.'||trim(cc.rdb$field_name)||''' as TBL_COL, count(*) as CNT from '
||trim(c.rdb$relation_name)
||' t where t.'||trim(cc.rdb$field_name)||' in (123456789) union all' as SQLA
from rdb$indices c
join rdb$index_segments cc on cc.rdb$index_name = c.rdb$index_name
join rdb$index_segments ccs on ccs.rdb$index_name = c.rdb$foreign_key
join rdb$indices cci on cci.rdb$index_name = ccs.rdb$index_name
where
trim(c.rdb$foreign_key) = 'PK_ESTIMATE'
union all select ') where CNT<>0' from rdb$database
;
select 'select * from (' as STMT1 from dual union all
select
'select '''||c.table_name||'.'||cc.column_name||' ('||c2c.column_name||')'' as TBLCOL, count(*) as CNT from '
||c.table_name
||' t where t.'||cc.column_name||' is not null and exists (select null from PURPOSEFULGRANT p where p.ID=t.'||cc.column_name||' and p.BUDGET_ID<>t.'||c2c.column_name||') union all'
from user_constraints c
join user_cons_columns cc on cc.constraint_name = c.constraint_name
join user_constraints c2 on c2.table_name=c.table_name and c2.r_constraint_name='PK_BUDGET'
join user_cons_columns c2c on c2c.constraint_name = c2.constraint_name
where c.r_constraint_name='PK_PURPOSEFULGRANT'
union all select ') where CNT <> 0' from dual
;
select 'select * from (' as STMT1 from rdb$database union all
select
/*
cc.rdb$index_name as CONSTRAINT_NAME
,trim(c.rdb$relation_name) as TABLE_NAME
,trim(cc.rdb$field_name) as COLUMN_NAME
,trim(c2c.rdb$field_name) as COLUMN_NAME2
,c.rdb$foreign_key as R_CONSTRAINT_NAME
,trim(cci.rdb$relation_name) as R_TABLE_NAME
,trim(ccs.rdb$field_name) as R_COLUMN_NAME
,trim(c.rdb$relation_name)||'.'||trim(cc.rdb$field_name) as TBL_COL
*/
'select '''||trim(c.rdb$relation_name)||'.'||trim(cc.rdb$field_name)||' ('||trim(c2c.rdb$field_name)||')'' as TBL_COL, count(*) as CNT from '
||trim(c.rdb$relation_name)
||' t where t.'||trim(cc.rdb$field_name)||' is not null and exists (select null from PURPOSEFULGRANT p where p.ID=t.'||trim(cc.rdb$field_name)||' and p.BUDGET_ID<>t.'||trim(c2c.rdb$field_name)||') union all' as SQLA
from rdb$indices c
join rdb$index_segments cc on cc.rdb$index_name = c.rdb$index_name
join rdb$index_segments ccs on ccs.rdb$index_name = c.rdb$foreign_key
join rdb$indices cci on cci.rdb$index_name = ccs.rdb$index_name
join rdb$indices c2 on c2.rdb$relation_name = c.rdb$relation_name and c2.rdb$foreign_key = 'PK_BUDGET'
join rdb$index_segments c2c on c2c.rdb$index_name = c2.rdb$index_name
where
trim(c.rdb$foreign_key) = 'PK_PURPOSEFULGRANT'
union all select ') where CNT<>0' from rdb$database
;
execute block returns (myblob blob) as
begin
FOR EXECUTE STATEMENT 'select data from anydata'
ON EXTERNAL DATA SOURCE '127.0.0.1/3050:c:/BASE.FDB' AS USER 'SYSDBA' PASSWORD 'masterkey'
INTO :myblob
DO SUSPEND;
end
select»
'select '''||c.table_name||'.'||cc.column_name||''',count(*) CNT from '
||c.table_name
||' t where t.'||cc.column_name||' in (''7140450641'', ''7140450642'') and t.BUDGET_ID=800000001309 union all'
from user_constraints c join user_cons_columns cc on cc.constraint_name = c.constraint_name where c.r_constraint_name='UQ_KCSR' and cc.column_name <> 'BUDGET_ID'
order by c.table_name,cc.column_name;
select 'PROTOCOL.KCSR_CODE',count(*) CNT from PROTOCOL t where t.KCSR_CODE in ('7140450641', '7140450642') and t.BUDGET_ID=800000001309 union all»
select 'PURPOSEFULGRANT_EXPKBK.KCSR_CODE',count(*) CNT from PURPOSEFULGRANT_EXPKBK t where t.KCSR_CODE in ('7140450641', '7140450642') and t.BUDGET_ID=800000001309 union all
...;
select * from (»
select 'PROTOCOL.KCSR_CODE',count(*) CNT from PROTOCOL t where t.KCSR_CODE in ('7140450641', '7140450642') and t.BUDGET_ID=800000001309 union all
select 'PURPOSEFULGRANT_EXPKBK.KCSR_CODE',count(*) CNT from PURPOSEFULGRANT_EXPKBK t where t.KCSR_CODE in ('7140450641', '7140450642') and t.BUDGET_ID=800000001309 union all
...
) where CNT<>0;
PURPOSEFULGRANT_EXPKBK.KCSR_CODE' 1»
select
'select '''
||trim(i.rdb$relation_name)||'.'||trim(isg.rdb$field_name)||''' as TABLE_NAME, count(*) as CNT from '
||trim(i.rdb$relation_name)||' where '||trim(isg.rdb$field_name)||'=777 union all'
from rdb$indices i
join rdb$index_segments isg on isg.rdb$index_name = i.rdb$index_name
where i.rdb$foreign_key = 'PK_BUDGETLINE'
order by
i.rdb$relation_name
,isg.rdb$field_name;
select
'select '''
||trim(i.rdb$relation_name)||''' as TABLE_NAME, count(*) as CNT from '
||trim(i.rdb$relation_name)||' as t where t.'
||trim(isg.rdb$field_name)||'=3250000000441 and t.KCSR_CODE is not null union all'
from rdb$indices i
join rdb$index_segments isg on isg.rdb$index_name = i.rdb$index_name
where i.rdb$foreign_key = 'UQ_KCSR'
and trim(isg.rdb$field_name) = 'BUDGET_ID'
order by
i.rdb$relation_name
,isg.rdb$field_name;
<tomcat>\webapps\test_app\index.jsp
<%@page import="java.sql.*" %>
<%Class.forName("org.firebirdsql.jdbc.FBDriver"); %>
<HTML>
<HEAD>
<TITLE>Database access through JSP</TITLE>
</HEAD>
<BODY>
<H1>Result of select query</H1>
<%
Connection connection = DriverManager.getConnection(
"jdbc:firebirdsql:dbserver/3255:c:/data/base.fdb",
"SYSDBA",
"masterkey");
Statement statement = connection.createStatement();
ResultSet resultset = statement.executeQuery("select id, name from user order by id asc");
%>
<TABLE BORDER="1">
<TR>
<TH>id</TH>
<TH>name</TH>
</TR>
<% while(resultset.next()){ %>
<TR>
<TD> <%= resultset.getString(1) %></TD>
<TD> <%= resultset.getString(2) %></TD>
</TR>
<% } %>
</TABLE>
</BODY>
</HTML>
/opt/firebird/firebird.confпараметр
RemoteServicePort