【问题标题】:temporary table creation not working in jasperserver(cannot execute CREATE TABLE in a read-only transaction)临时表创建在 jasperserver 中不起作用(无法在只读事务中执行 CREATE TABLE)
【发布时间】:2017-03-20 12:04:14
【问题描述】:

我在postgres 有一个带有临时表的函数。

create or replace function sp_test_function()
returns table (id integer,enqu_id integer) as
$BODY$
BEGIN

create temporary table temp_table(
id serial,
enquiry_id integer

) on commit drop;

insert into temp_table(enquiry_id) select enquiry_id  from sales_enquiry;

return query select t.id,enquiry_id from temp_table t;

END;
$BODY$
language plpgsql;

我在jasper 有一份报告,并使用上述函数获取数据。当我从服务器运行报告时出现此错误cannot execute CREATE TABLE in a read-only transaction。我试过SET TRANSACTION READ WRITE

$BODY$
BEGIN
 SET TRANSACTION READ WRITE
create temporary table temp_table(
id serial,
enquiry_id integer

) on commit drop

但又出现了一个错误transaction read-write mode must be set before any query。 postgres函数中如何设置事务?

【问题讨论】:

标签: postgresql jasperserver


【解决方案1】:

我终于找到了答案。

第 1 步:打开 context.xml 文件 (C:\Jaspersoft\jasperreports-server-cp-5.5.0\apache-tomcat\webapps\jasperserver\META-INF\context.xml)

在该文件中添加以下代码(我正在使用postgresql db)

<Resource name="jdbc/your_db_name" auth="Container" type="javax.sql.DataSource"
        maxActive="100" maxIdle="30" maxWait="10000"
        username="db_username" password="db_password" 
        driverClassName="org.postgresql.Driver"
        validationQuery="SELECT 1"
        testOnBorrow="true"
        url="jdbc:postgresql://127.0.0.1:5432/ur_db_name?useUnicode=true&amp;characterEncoding=UTF-8&amp;autoReconnect=true&amp;autoReconnectForPools=true"            factory="com.jaspersoft.jasperserver.tomcat.jndi.JSBasicDataSourceFactory"/>

步骤:2 打开web.xml (C:\Jaspersoft\jasperreports-server-cp-5.5.0\apache-tomcat\webapps\jasperserver\WEB-INF\web.xml)

添加以下代码

<resource-ref>
    <description>some_description</description>
        <res-ref-name>jdbc/ur_db_name</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

第 3 步:重新启动您的 jasperserver

第4步:登录jasper server并添加new datasource。从下拉列表中选择JNDI Data Source 而不是JDBC Data Source

在文本框字段 Service Name (required): 中输入 jdbc/ur_db_name 。然后单击Test Connection,您会在Connection Passed 顶部收到一条弹出消息。就是这样 现在您可以在报告中使用这个datasource。希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 2023-03-27
    相关资源
    最近更新 更多