jihantoro

jihantoro

hi, i have a lot of table in my db, is there any tool that automaticallly generate schema based on table column (with column types, etc)

something like, i just need to define credentials and database, and the tool will generate schema for all table

Showing Posts 1 to 6

Eiji

Eiji

@jihantoro It’s not so simple. To make full generation you would need to write it on yourself with your custom mapping to contexts and module names.

defmodule MyApp.SchemaGenerator.Rules do
  @context_a_tables ["table_a1", "table_a2", "table_a3", …]
  …

  def context_for(tables) where tables in @context_a_tables, do: MyApp.AContext
  …


  def schema_module_part("table_a1"), do: :TableA1
  …
end

and even that’s not all. You could later add some virtual fields (if any needed) … Also don’t forget about custom types, migrations and many more …

Creating full generator for every project is not possible. You could write a library, but people would change generator results anyway, so I don’t think that it have a bigger sense.

dbern

dbern

A quick Google shows me this tool: ecto_generator/README.md at master · alexandrubagu/ecto_generator · GitHub

I’ve not used it, so I’m not sure of it’s effectiveness, but may be a good start, and then edit the generated files to fill in holes.

Eiji

Eiji

Firstly it uses template. I think that much better is simple macro here. It’s harder to read its code. Secondly it supports really low number of types. I can see only DateTime, but no Date and Time. There is no array support as well as json/jsonb support. Thirdly it generates field with float type for decimal database type. As said of course such tool does not support lots of other things which @jihantoro would need to change anyway. There could be a good scenic tool which asks what to do in special cases, but such generator is too limited and there is no simple solution for all edge cases. Of course we could say that’s enough at start, but if you have really big number of different tables then ensuring that decimal have proper declaration is not so easy too while project could still compile which causes lots of confusion. For example think how to properly support enum inside json/jsonb column.

benperiton

benperiton

Possibly helpful posts;

mikemccall

mikemccall

I was looking for a tool like this too. Something that worked much like django’s inspect.db. I ended up writing some one off scripts and using phoenix’s mix phx.gen.schema.

You can obtain information about your database using something like:

select *
from INFORMATION_SCHEMA.TABLES
where table_schema = 'database';

and

select *
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'table_name';

I still ended up doing plenty manual work but this did save a lot of time. It was a one off thing it didn’t bother me too much. I don’t know how much that helps but it’s another option.

OvermindDL1

OvermindDL1

For note, I wouldn’t really consider such a tool very useful, schema’s should match the query patterns, which may not necessarily match the tables. In my case I do have a schema ‘near’ matching each table, but I also have a lot more schemas for all the return data from the queries to keep everything typed and clean. (Except in a few cases where I return maps/lists/tuples/whatever for dynamic or pipelining reasons.)

— All posts loaded —

Where Next? Top

Trending in Questions Top

RSP87
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
RemyXRenard
I’m seeing that a list inside a Kino.DataTable will be interpreted as a charlist, even if the Kino.configure() is set to charlists: :as_l...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
samoloth
Hi, I’ve just set up an application with ash_authentication. There is only magic link strategy for now, so there is no confirmation add o...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New

Other Trending Topics Top

JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Dmk
Xamal is a deployment tool for Elixir apps that deploys native releases to bare metal servers over SSH. It’s a port of GitHub - basecamp/...
New

Latest on Elixir Forum

Elixir Forum

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews