posit-dev / posit-dev/pointblank
fix: Permission Error trying to use `pb.load_data_set()` with duckdb on Windows
Open
Nobody has claimed this yet.
Type: ☹︎ Bug
- Dominant language
- Python
- Stars
- 490
- Forks
- 32
- Avg merge
- 14h 24m
- Merged PRs (30d)
- 2
Description
Description
When running pb.load_dataset(dataset="small_table", tbl_type="duckdb") on my Windows machine, I get the following error:
File "C:\Users\00113294\Projects\pointblank\pointblank\validate.py", line 562, in load_dataset
with tempfile.TemporaryDirectory() as tmp, ZipFile(data_path, "r") as z:
~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "C:\Users\00113294\AppData\Roaming\uv\python\cpython-3.13.2-windows-x86_64-none\Lib\tempfile.py", line 946, in __exit__
self.cleanup()
~~~~~~~~~~~~^^
File "C:\Users\00113294\AppData\Roaming\uv\python\cpython-3.13.2-windows-x86_64-none\Lib\tempfile.py", line 950, in cleanup
self._rmtree(self.name, ignore_errors=self._ignore_cleanup_errors)
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\00113294\AppData\Roaming\uv\python\cpython-3.13.2-windows-x86_64-none\Lib\tempfile.py", line 930, in _rmtree
_shutil.rmtree(name, onexc=onexc)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
File "C:\Users\00113294\AppData\Roaming\uv\python\cpython-3.13.2-windows-x86_64-none\Lib\shutil.py", line 790, in rmtree
return _rmtree_unsafe(path, onexc)
File "C:\Users\00113294\AppData\Roaming\uv\python\cpython-3.13.2-windows-x86_64-none\Lib\shutil.py", line 629, in _rmtree_unsafe
onexc(os.unlink, fullname, err)
~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\00113294\AppData\Roaming\uv\python\cpython-3.13.2-windows-x86_64-none\Lib\tempfile.py", line 905, in onexc
_os.unlink(path)
~~~~~~~~~~^^^^^^
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\Users\\00113294\\AppData\\Local\\Temp\\tmps3x_936b\\small_table.ddb'
According to Claude:
This is a Windows-specific issue with DuckDB file locking and temporary file cleanup. The error occurs because:
- File Handle Not Released: When
pb.load_dataset()creates a DuckDB database file in a temporary directory, the database connection isn't being properly closed before Python tries to clean up the temporary directory.- Windows File Locking: Windows is more strict about file locking than Unix systems - it won't allow deletion of files that have open handles, even if the process that opened them is trying to delete them.
Development environment
- Operating System: Windows
- Pointblank Version: 0.11.2
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in pointblank/validate.py around line 562 and reproduce pb.load_dataset(dataset="small_table", tbl_type="duckdb") on Windows. Trace the temporary DuckDB file cleanup and verify that loading the dataset completes without a PermissionError when the temporary directory is removed.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- databases
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100