<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on blog</title><link>https://blog.orabra.no/post/</link><description>Recent content in Posts on blog</description><generator>Hugo</generator><language>en</language><lastBuildDate>Wed, 15 Oct 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.orabra.no/post/index.xml" rel="self" type="application/rss+xml"/><item><title>OCI GenAI and APEX - LiveLab</title><link>https://blog.orabra.no/2025/10/15/oci-genai-and-apex/</link><pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate><guid>https://blog.orabra.no/2025/10/15/oci-genai-and-apex/</guid><description>&lt;p&gt;&lt;img src="https://blog.orabra.no/images/livelab-01.png" alt=""&gt;&lt;/p&gt;
&lt;h1 id="introduction"&gt;Introduction&lt;/h1&gt;
&lt;p&gt;In honor of Joel Kallman I have been playing with one of the Livelabs here &lt;a href="https://livelabs.oracle.com"&gt;https://livelabs.oracle.com&lt;/a&gt;. &amp;ldquo;Analyze Document store with RAG on Oracle APEX&amp;rdquo;.
I love these Livelabs. They give insights, ideas and open my eyes to what is possible with Oracle technology. For a DevOps guy like me it is hard to click around and make things work. I prefer a GitOps style approach where I can document the different steps especially when a LiveLab contains several components like the Database, OCI and APEX. There are so many small steps I will forget if I don&amp;rsquo;t document it. I want this documentation to be available to me for future projects and labs.
So, how can I iteratively develop my skills? Automate and make the Livelab reproducible with code!&lt;/p&gt;</description></item><item><title>Install Marketplace Extension to Windsurf and Cursor</title><link>https://blog.orabra.no/2025/05/22/install-marketplace-extension-to-windsurf-and-cursor/</link><pubDate>Thu, 22 May 2025 14:00:22 +0200</pubDate><guid>https://blog.orabra.no/2025/05/22/install-marketplace-extension-to-windsurf-and-cursor/</guid><description>&lt;h1 id="introduction"&gt;Introduction&lt;/h1&gt;
&lt;p&gt;The Visual Studio Marketplace is not open to Windsurf or Cursor.
In order to install certain extensions we need to do some steps.&lt;/p&gt;
&lt;p&gt;I needed to install the &lt;em&gt;Oracle SQL Developer extension for VS Code&lt;/em&gt; to &lt;em&gt;Windsurf&lt;/em&gt;.&lt;/p&gt;
&lt;h1 id="say-hi-to-the-cli-tool-windsurf-vsix-tool"&gt;Say Hi to the CLI tool &amp;lsquo;windsurf-vsix-tool&amp;rsquo;&lt;/h1&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;git clone https://github.com/twotreeszf/windsurf-vsix-tool.git
Cloning into &amp;#39;windsurf-vsix-tool&amp;#39;...
remote: Enumerating objects: 38, done.
remote: Counting objects: 100% (38/38), done.
remote: Compressing objects: 100% (26/26), done.
remote: Total 38 (delta 21), reused 28 (delta 11), pack-reused 0 (from 0)
Receiving objects: 100% (38/38), 13.96 KiB | 3.49 MiB/s, done.
Resolving deltas: 100% (21/21), done.``
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id="install-the-dependencies"&gt;Install the dependencies&lt;/h1&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;pip install -r requirements.txt
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id="install-the-oracle-sql-developer-extension-for-vs-code"&gt;Install the Oracle SQL Developer Extension for VS Code&lt;/h1&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;python vsix-tool.py
Enter VS Marketplace URL: https://marketplace.visualstudio.com/items?itemName=Oracle.sql-developer
Download dependencies? (y/N): y
Detected platform: darwin-x64

Analyzing extension...
Querying extension: Oracle.sql-developer

Downloading [1/1]: Oracle.sql-developer
Downloading 01-Oracle-sql-developer-25.1.1.vsix: 100%|████████████████████████████████████████████████████████████████████████████████████████| 315M/315M [00:24&amp;lt;00:00, 12.9MiB/s]
Successfully downloaded: downloads/01-Oracle-sql-developer-25.1.1.vsix

Install extensions in an IDE? (y/N): y

Select IDE:

1. Windsurf
2. Cursor
 Enter choice (1/2): 1

Installing extensions in Windsurf...
Installing 01-Oracle-sql-developer-25.1.1.vsix...
Successfully installed

All extensions installed successfully!
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src="https://blog.orabra.no/images/windsurf-with-sql-dev.png" alt=""&gt;&lt;/p&gt;</description></item><item><title>PostgreSQL: list your psql scripts</title><link>https://blog.orabra.no/2024/09/26/list_your_psql_scripts/</link><pubDate>Thu, 26 Sep 2024 10:17:48 +0200</pubDate><guid>https://blog.orabra.no/2024/09/26/list_your_psql_scripts/</guid><description>&lt;h1 id="introduction"&gt;Introduction&lt;/h1&gt;
&lt;p&gt;If you are a PostgreSQL database administrator like me where you operate many databases, it is a vital task to organize your sql-scripts in a way for easy lookup and execution. I have tons of scripts. How am I supposed to have them at hand when I need them? I need to lookup these scripts from within psql to stay focused. I will share with you my solution to this problem.&lt;/p&gt;</description></item><item><title>PostgreSQL: count rows in all tables in schema</title><link>https://blog.orabra.no/2024/08/30/count_rows_all_tables/</link><pubDate>Fri, 30 Aug 2024 11:21:54 +0200</pubDate><guid>https://blog.orabra.no/2024/08/30/count_rows_all_tables/</guid><description>&lt;h1 id="introduction"&gt;Introduction&lt;/h1&gt;
&lt;p&gt;It is sometimes nice to count all rows in all tables in a given schema. Just remember this will be an expensive operation if the dataset is big. It is possible to count rows based on statistics, but this solution will hit the blocks.&lt;/p&gt;
&lt;h1 id="count-all-rows-in-all-tables-in-current-schema"&gt;Count all rows in all tables in current schema&lt;/h1&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;with x (y) as (
 select
 format(&amp;#39;select %L as tablename, count(*) from %I &amp;#39;, tablename, tablename)
 from pg_tables
 where schemaname=current_schema()
)
select
 string_agg(y,&amp;#39; union all &amp;#39;||chr(10)) || &amp;#39; order by tablename&amp;#39;
from x \gexec
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The query generates a statement that is sent to psql \gexec for execution.&lt;/p&gt;</description></item><item><title>Search for Code Snippets on GitHub</title><link>https://blog.orabra.no/2024/08/12/search-for-code-snippets/</link><pubDate>Mon, 12 Aug 2024 10:22:59 +0200</pubDate><guid>https://blog.orabra.no/2024/08/12/search-for-code-snippets/</guid><description>&lt;h1 id="introduction"&gt;Introduction&lt;/h1&gt;
&lt;p&gt;Sometimes you just need to understand how to use the different cloud vendors or platform CLI. (oci, aws, gcp, azure, aiven and many others &amp;hellip;). You can browse StackOverflow and learn a lot along the way. But what if we just want to stay on the command line and be presented with a nice output with variations of the CLI command - even with very creative ways to use the CLI.&lt;/p&gt;</description></item><item><title>Oracle Database Free Docker</title><link>https://blog.orabra.no/2023/10/08/oracle-free-docker/</link><pubDate>Sun, 08 Oct 2023 18:29:51 +0200</pubDate><guid>https://blog.orabra.no/2023/10/08/oracle-free-docker/</guid><description>&lt;h1 id="introduction"&gt;Introduction&lt;/h1&gt;
&lt;p&gt;For every technology I learn and use, I start with a simple setup and build on top of it utilizing &amp;lsquo;docker compose&amp;rsquo;.
We are going to spin up an Oracle Database Free (23c) where we run some init-scripts. Now we can play with all the exciting new features the database provides.&lt;/p&gt;
&lt;h1 id="setup"&gt;Setup&lt;/h1&gt;
&lt;p&gt;Docker Compose is a convenient way to spin up a service. Declare your configuration and issue &amp;lsquo;docker compose up&amp;rsquo;. You
are running a very sophisticated database locally also used by the largest banks in the world.&lt;/p&gt;</description></item></channel></rss>