1010namespace duckdb {
1111
1212struct PGExecuteBindData : public TableFunctionData {
13- explicit PGExecuteBindData (PostgresCatalog &pg_catalog, string query_p)
14- : pg_catalog(pg_catalog), query(std::move(query_p)) {
13+ explicit PGExecuteBindData (PostgresCatalog &pg_catalog, string query_p, bool use_transaction )
14+ : pg_catalog(pg_catalog), query(std::move(query_p)), use_transaction(use_transaction) {
1515 }
1616
1717 bool finished = false ;
1818 PostgresCatalog &pg_catalog;
1919 string query;
20+ bool use_transaction = true ;
2021};
2122
2223static duckdb::unique_ptr<FunctionData> PGExecuteBind (ClientContext &context, TableFunctionBindInput &input,
@@ -36,7 +37,15 @@ static duckdb::unique_ptr<FunctionData> PGExecuteBind(ClientContext &context, Ta
3637 throw BinderException (" Attached database \" %s\" does not refer to a Postgres database" , db_name);
3738 }
3839 auto &pg_catalog = catalog.Cast <PostgresCatalog>();
39- return make_uniq<PGExecuteBindData>(pg_catalog, input.inputs [1 ].GetValue <string>());
40+
41+ bool use_transaction = true ;
42+ for (auto &kv : input.named_parameters ) {
43+ if (kv.first == " use_transaction" ) {
44+ use_transaction = BooleanValue::Get (kv.second );
45+ }
46+ }
47+
48+ return make_uniq<PGExecuteBindData>(pg_catalog, input.inputs [1 ].GetValue <string>(), use_transaction);
4049}
4150
4251static void PGExecuteFunction (ClientContext &context, TableFunctionInput &data_p, DataChunk &output) {
@@ -45,13 +54,19 @@ static void PGExecuteFunction(ClientContext &context, TableFunctionInput &data_p
4554 return ;
4655 }
4756 auto &transaction = Transaction::Get (context, data.pg_catalog ).Cast <PostgresTransaction>();
48- transaction.Query (data.query );
57+ if (data.use_transaction ) {
58+ transaction.Query (data.query );
59+ } else {
60+ transaction.QueryWithoutTransaction (data.query );
61+ }
62+
4963 data.finished = true ;
5064}
5165
5266PostgresExecuteFunction::PostgresExecuteFunction ()
5367 : TableFunction(" postgres_execute" , {LogicalType::VARCHAR, LogicalType::VARCHAR}, PGExecuteFunction,
5468 PGExecuteBind) {
69+ named_parameters[" use_transaction" ] = LogicalType::BOOLEAN;
5570}
5671
5772} // namespace duckdb
0 commit comments