# How to use DuckDB in Node-RED(just in node-red function)

**URL:** <https://discourse.nodered.org/t/how-to-use-duckdb-in-node-red-just-in-node-red-function/98487>\
**Category:** General\
**Tags:** function-node\
**Created:** [4 August 2025 04:58 UTC](https://discourse.nodered.org/t/how-to-use-duckdb-in-node-red-just-in-node-red-function/98487 "2025-08-04T04:58:10Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![hyxdxhb1231](https://avatars.discourse-cdn.com/v4/letter/h/65b543/32.png) [@hyxdxhb1231](https://discourse.nodered.org/u/hyxdxhb1231)\
**Post date:** [4 August 2025 04:58 UTC](https://discourse.nodered.org/t/how-to-use-duckdb-in-node-red-just-in-node-red-function/98487/1 "2025-08-04T04:58:10Z")

</div>

Hi guys, the existing DuckDB node in Node-RED is broken.  
How can I do the same with a function node?

Here is an example, but when i try it again, the Node-RED will broken down. The log information said that **[error] Error: IO Error: Cannot open file "demo.duckdb"**

```auto
[
    {
        "id": "f7d4d3866eecb39f",
        "type": "function",
        "z": "c86c4b4c464dad69",
        "name": "function 2",
        "func": "// 2. 主函数（IIFE）\n(async () => {\n // 2.1 创建/打开数据库（磁盘文件）\n const db = await duckdbNodeApi.DuckDBInstance.create('demo.duckdb', { threads: '4' });\n const conn = await db.connect();\n\n // 2.2 建表\n await conn.run(`\n CREATE OR REPLACE TABLE users (\n id INTEGER,\n name VARCHAR,\n age INTEGER\n )\n `);\n\n // 2.3 准备批量插入\n const appender = await conn.createAppender('users');\n const rows = [\n [4, 'ddac', 45]\n ];\n for (const [id, name, age] of rows) {\n appender.appendInteger(id);\n appender.appendVarchar(name);\n appender.appendInteger(age);\n appender.endRow();\n }\n appender.flushSync(); // 立即落盘\n appender.closeSync();\n\n // 2.4 查询\n const reader = await conn.runAndReadAll(\n 'SELECT * FROM users WHERE age > 30 ORDER BY age DESC'\n );\n\n // 2.5 输出结果（JSON 形式）\n console.log(reader.getRowObjectsJson());\n\n // 2.6 清理\n await conn.disconnectSync();\n await db.duckdb_\n})();\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [
            {
                "var": "duckdbNodeApi",
                "module": "@duckdb/node-api"
            }
        ],
        "x": 260,
        "y": 80,
        "wires": [
            []
        ]
    }
]

```

---

<div class="post-metadata">

**Author:** ![bakman2](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/bakman2/32/6207_2.png) [@bakman2](https://discourse.nodered.org/u/bakman2)\
**Post date:** [4 August 2025 06:56 UTC](https://discourse.nodered.org/t/how-to-use-duckdb-in-node-red-just-in-node-red-function/98487/2 "2025-08-04T06:56:54Z")

</div>

Assuming the following import:

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/a/4/a43a5850e53b2397daec0ac9d40d9dc04d84ec41.png)

Function:

```auto
const instance = await duckdb.DuckDBInstance.create('my_duckdb.db');
node.warn({instance})

return msg;

```

debug result:

```auto
{"instance":{"db":{}}}

```

and the `my_duckdb.db` has been created in my homepath.

---

<div class="post-metadata">

**Author:** ![hyxdxhb1231](https://avatars.discourse-cdn.com/v4/letter/h/65b543/32.png) [@hyxdxhb1231](https://discourse.nodered.org/u/hyxdxhb1231)\
**Post date:** [4 August 2025 07:14 UTC](https://discourse.nodered.org/t/how-to-use-duckdb-in-node-red-just-in-node-red-function/98487/3 "2025-08-04T07:14:33Z")

</div>

Now, when you try to connect with DuckDB CLI to my\_duckdb.db, you get:

`Error: unable to open database "my_duckdb.db": IO Error: File is already open in node.exe`

How can I close the database **without** shutting down Node-RED/Node.exe?

---

<div class="post-metadata">

**Author:** ![bakman2](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/bakman2/32/6207_2.png) [@bakman2](https://discourse.nodered.org/u/bakman2)\
**Post date:** [4 August 2025 07:36 UTC](https://discourse.nodered.org/t/how-to-use-duckdb-in-node-red-just-in-node-red-function/98487/4 "2025-08-04T07:36:54Z")

</div>

The [documentation](https://www.npmjs.com/package/@duckdb/node-api) states:

> Multiple instances in the same process should not attach the same database.

As the db is already created, you can use the cache method:

```auto
const instance = await duckdb.DuckDBInstance.fromCache('my_duckdb.db');

node.warn({instance})

const connection = await instance.connect();
node.warn({connection})

connection.closeSync();

return null

```

---

<div class="post-metadata">

**Author:** ![gregorius](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/gregorius/32/73816_2.png) [@gregorius](https://discourse.nodered.org/u/gregorius)\
**Post date:** [4 August 2025 07:37 UTC](https://discourse.nodered.org/t/how-to-use-duckdb-in-node-red-just-in-node-red-function/98487/5 "2025-08-04T07:37:27Z")

</div>

Probably won't answer your question but I once used DuckDB _in the_ browser --\> [FlowHub: [DuckDB] In-Browser DuckDB with Discourse API](https://flowhub.org/f/74ea134517e51857)

It worked but just for demonstration purposes!

---

<div class="post-metadata">

**Author:** ![hyxdxhb1231](https://avatars.discourse-cdn.com/v4/letter/h/65b543/32.png) [@hyxdxhb1231](https://discourse.nodered.org/u/hyxdxhb1231)\
**Post date:** [5 August 2025 05:01 UTC](https://discourse.nodered.org/t/how-to-use-duckdb-in-node-red-just-in-node-red-function/98487/6 "2025-08-05T05:01:31Z")

</div>

It still not work

---

<div class="post-metadata">

**Author:** ![bakman2](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/bakman2/32/6207_2.png) [@bakman2](https://discourse.nodered.org/u/bakman2)\
**Post date:** [5 August 2025 05:31 UTC](https://discourse.nodered.org/t/how-to-use-duckdb-in-node-red-just-in-node-red-function/98487/7 "2025-08-05T05:31:35Z")

</div>

We cannot guess what you are trying to do, what does the code in your function node look like ?

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/1X/d073cd938eafa2e558d7c2cd59003b3ef4963033.png) [@system](https://discourse.nodered.org/u/system)\
**Post date:** [3 November 2025 05:32 UTC](https://discourse.nodered.org/t/how-to-use-duckdb-in-node-red-just-in-node-red-function/98487/8 "2025-11-03T05:32:17Z")

</div>

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.
