I do find the "db:" prefix ugly. If you want users to see these strings I would think they find this prefix to be clutter too.
You seem to be alone in calling it "pg:". For the other examples out there I see "postgresql:" or "postgres:". Should all different ways be allowed and lead to the same thing? I've seen both "mysql:" and "mysql2:". What about "mariadb:"? For sqlite:-URLs people seem to disagree on how to specify relative vs absolute path names. I wish there actually was _a_ standard for this stuff. :-) --Gisle On Tue, Nov 26, 2013 at 7:14 PM, David E. Wheeler <da...@justatheory.com>wrote: > On Nov 26, 2013, at 9:32 AM, Gisle Aas <gi...@activestate.com> wrote: > > > To me the value of database urls would be compatibility with other > implementations of this obvious idea. Some examples I found by quick > googling: > > > > http://docs.sqlalchemy.org/en/rel_0_9/core/engines.html#database-urls > > > http://docs.stackato.com/3.0/user/services/data-services.html#database-url > > https://github.com/kennethreitz/dj-database-url > > https://github.com/glenngillen/rails-database-url > > http://www.jguru.com/faq/view.jsp?EID=690 > > > http://www.postgresql.org/docs/9.3/static/libpq-connect.html#LIBPQ-CONNSTRING > > > > It would be useful for somebody to survey these and then provide a perl > module that's compatible with the consensus among these. It would also be > a good place to document what the state of database urls currently is. > > Thanks for those links They are all very similar (except for the rails > one, which lacks docs). And they are similar to what I've come up with, > detailed here: > > https://github.com/theory/uri-db/blob/master/lib/URI/db.pm > > Basically, a database format is actually two URIs. The first is an opaque > URI, "db:(.+)". The second URL is inside the "(.+)", and can take two forms: > > $engine://$user:$pass@$host:$port$dbname?$params > $engine:$dbname?$params > > Some examples from the test suite: > > db: > db:pg: > db:pg://localhost > db:pg://localhost:33 > db:pg://foo:123/try?foo=1&foo=2&lol=yes > db:sqlite: > db:sqlite:foo.db > db:sqlite:/path/foo.db > db:sqlite:///path/foo.db > db:cubrid://localhost:33/foo > db:db2://localhost:33/foo > db:firebird://localhost:33/foo > db:informix:foo.db > db:informix:foo.db?foo=1 > db:ingres:foo.db > db:ingres:foo.db?foo=1 > db:interbase://localhost:33/foo > db:maxdb://localhost:33/foo > db:maxdb://localhost/foo > db:monetdb://localhost:1222?foo=1 > db:monetdb://localhost/lolz > db:mysql://localhost:33/foo > db:oracle://localhost:33/foo > db:sqlserver://localhost:33/foo > db:sybase://localhost:33/foo > db:teradata://localhost > db:teradata://localhost:33/foo?hi=1 > db:unify:foo.db > db:unify: > db:unify:?foo=1&bar=2 > db:vertica: > db:vertica://localhost > db:vertica://localhost:33 > db:vertica://foo:123/try?foo=1&foo=2&lol=yes > > I think it’s pretty simple and familiar, and plan to put it (or something > similar, based on this and other discussions) in Sqitch. > > Thoughts? > > David > >