mmmrrr
I need to include multiple legacy migrations (written in plain SQL) in an ecto migration.
The current legacy application relies heavily on custom ENUM types in postgresql.
When I try to run the existing migrations (concatenated as a string) via execute my_combined_sql I will get the error cannot insert multiple commands into a prepared statement.
The minimal example of a failing SQL file is:
CREATE TYPE UState AS ENUM ("state1", "state2");
CREATE TABLE IF NOT EXISTS Users
(userEmail VARCHAR(320) NOT NULL PRIMARY KEY,
state UState NOT NULL);
Is there a way to do this with ecto, or do I need another process to apply the legacy migrations to the database?
Trending in Questions
Hello!
Suppose you are building workflow (order / task / payment) processing system with the following requirements:
Each workflow con...
New
Hey guys,
I’ve got a huge CSV ( around 10 GB ) that needs to be processed hourly
Do you guys have any suggestions what is the best prac...
New
Kia ora,
We have been using elixir-google-api to connect to Google Drive. However, with the updates to Tesla due to CVEs this is now bro...
New
Hello!
Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app.
I creat...
New
I have what I’ve heard referred to as a “lookup table” in my database. This is a way of assigning codes to common values. One common lo...
New
Hello,
I’m developing a online persistent chat system (what’s app) like using elixir/dynamodb/aws for a mobile app(flutter).
The diffic...
New
What approach to take when sending live updates to “random” users Hi! I have a question, I have a little chat app, and when I create a DM...
New
Other Trending Topics
Hobbes is a low-level distributed database for the Elixir programming language.
Hobbes provides a simple, safe, and scalable storage lay...
New
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve.
They are GUI (Emerge) and State management (S...
New
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
There are three potential reasons for members of this forum to have a look at https://vutuv.de
You are tired or annoyed of LinkedIn.
Yo...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #blog-post
- #ai
- #phoenix_html
- #iex
- #elixirconf-us
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #hex
- #security
- #metaprogramming










Showing Posts 1 to 8- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
kip
By default Ecto uses prepared statements (this is like a precompiled form of the statement which is the cached so that reuse is materially faster).
There is an option
prepare: :unnamedwhich I think goes on the Repo configuration (its a Postgrex adapter option) but I can’t recall and I’m in China this week so googling isn’t an option.Sorry its an incomplete answer but hopefully thats enough to get you started…
kip
On reflection, I suspect this won’t go either because the statements are still prepared and, as the message says, you can’t have more than one.
Indeed I recall having to split SQL statements at the
;in one use case and passing them one-by-one.This is primarily a
Postegrexissue, notEcto.mmmrrr
Hey @kip
Thanks for the input and taking the time.
In principle this shouldn’t be a problem to execute the statements one by one. This specific migration does not need to execute fast.
Just to clearify: I could split my SQL statements into a list and then call
execute SUBQUERY1,execute SUBQUERY2, etc. in the sameup/downstatement, right?This sounds a lot like “macro” to me
kip
Now I’ve paid a little more attention… I believe the issue is that you can’t create the
Enumin the same transaction as using it.Typically what I do in this case is actually prepare two migrations: one to create the
Enumand the other to create the table.However should be perfectly ok to:
mmmrrr
Awesome!
Thanks for the feedback. I will try that
mmmrrr
Great! That worked. It needed a little cleanup in the sql files in order to work, but it does now.
For anyone interested: If you have a List/Array of sql statements, you can use a simple macro like:
in your up migration:
NobbZ
Why a macro at all? If you had written it as a function, then there would be no noeed to quote and unquote…
Or even simpler, have it inline:
mmmrrr
Hm. Good point.
I somehow assumed the execute statement would not allow to be called at runtime… now that I think of it, it’s probably stupid
Thanks for the input