-
Notifications
You must be signed in to change notification settings - Fork 4
/
778.txt
167 lines (132 loc) · 6.37 KB
/
778.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
[4] [[データベース]]を表す [[URL scheme]] がいくつか使われています。
[2]
[FIG(short list)[
- [CODE(URI)@en[[[db:]]]]
- [CODE(URI)@en[[[jdbc:]]]]
- [CODE(URI)@en[[[mysql:]]]]
- [CODE(URI)@en[mysql2:]]
- [CODE(URI)@en[mysql+zxjdbc:]]
- [CODE(URI)@en[mysql+mysqlconnector:]]
- [CODE(URI)@en[mysql+cymysql:]]
- [CODE(URI)@en[mysql+pymysql:]]
- [CODE(URI)@en[mysql+gaerdbms:]]
- [CODE(URI)@en[mysql+pyodbc:]]
- [CODE(URI)@en[mysql+mysqldb:]]
- [CODE(URI)@en[mysqlgis:]]
- [CODE(URI)@en[[[oracle:]]]]
- [CODE(URI)@en[[[redis:]]]]
- [CODE(URI)@en[[[rediss:]]]]
- [CODE(URI)@en[sqlite:]]
- [CODE(URI)@en[sqlite3
:]]
]FIG]
* 意味
[5] 多くの [[URL]] は、接続先の[[データベース]]を表しています。
すなわち、[[データベース]]へ接続するために必要な[[プロトコル]]、
[[ホスト]]、[[データベース]]名、接続オプションなどを [[URL]]
に含めています。
[7] [[データベース]]内のデータにまで[[アドレス付け]]している [[URL scheme]]
は今のところなさそうです。
* 標準化
[6] あらゆる点でほとんど[[実装依存]]であり、[[標準化]]の動きもありません。
みな似たような構文と意味に収まっていますが、細かい点に色々と違いがありそうです。
* 環境変数 [CODE[DATABASE_URL]]
[14] [[Ruby on Rails]] は[[設定ファイル]]内で接続先の[[データベース]]を [[URL]]
で指定できるとしています。加えて、[[環境変数]] [DFN[[CODE[DATABASE_URL]]]]
によって指定する方法も提供しています。
* 歴史
[8] [[ODBC]] や [[Perlモジュール]]の [[DBI]] は、接続先の[[データベース]]の種類
([[プロトコル]]) によらず (ほぼ) 共通化された構文の[[接続文字列][ODBC DSN]]や
[[DSN][DBI DSN]] を採用していました。
これが単一の[[文字列]]によって接続先[[データベース]]の記述を統合的に扱おうとした事例のはしりなのでしょうが、
[[接続文字列]]は構文的に [[URL]] とまったく異なっていましたし、
[[DSN][DBI DSN]] も [[URL]] とは見なされていませんでした。
* メモ
[9] [[データベース]]へ接続するためには[[ホスト]]、[[プロトコル]]、
[[データベース名]]など色々なオプションを指定しなければなりません。
[[データベース]]を扱う[[アプリケーション]]の起動時や設定ファイルでこれを一々指定するのも中々大変ですし、
複数の[[データベース]]に接続する巨大な[[アプリケーション]]では[[データベース]]管理だけで一苦労です。
その点、 [[URL]] のようにこうした指定を1つの[[文字列]]にまとめられると、
[[データベース]]ごとに1[[文字列]]を指定できるようにすれば良いだけなので、
[[開発者]]も[[運用]]担当者も楽になります。
[1] [CITE@en[Engine Configuration — SQLAlchemy 0.9 Documentation]]
([TIME[2015-07-06 00:17:46 +09:00]] 版)
<http://docs.sqlalchemy.org/en/rel_0_9/core/engines.html#database-urls>
[FIG(quote)[
[FIGCAPTION[
[3] [CITE[Data Services — Stackato 3.0.1 documentation]]
([TIME[2015-07-03 07:24:32 +09:00]] 版)
<http://docs.stackato.com/3.0/user/services/data-services.html#database-url>
]FIGCAPTION]
> It contains the connection string for the bound database in the following format:
> protocol://username:password@host:port/database_name
]FIG]
[FIG(quote)[
[FIGCAPTION[
[10] [CITE@en[Welcome to Django-environ’s documentation! — Django-environ 0.4.0 documentation]]
([TIME[2015-09-24 01:20:50 +09:00]])
<https://django-environ.readthedocs.io/en/latest/>
]FIGCAPTION]
> db_url
> PostgreSQL: postgres://, pgsql://, psql:// or postgresql://
> PostGIS: postgis://
> MySQL: mysql:// or mysql2://
> MySQL for GeoDjango: mysqlgis://
> SQLITE: sqlite://
> SQLITE with SPATIALITE for GeoDjango: spatialite://
> LDAP: ldap://
> cache_url
> Database: dbcache://
> Dummy: dummycache://
> File: filecache://
> Memory: locmemcache://
> Memcached: memcache://
> Python memory: pymemcache://
> Redis: rediscache://
> search_url
> ElasticSearch: elasticsearch://
> Solr: solr://
> Whoosh: whoosh://
> Xapian: xapian://
> Simple cache: simple://
> email_url
> SMTP: smtp://
> SMTP+SSL: smtp+ssl://
> SMTP+TLS: smtp+tls://
> Console mail: consolemail://
> File mail: filemail://
> LocMem mail: memorymail://
> Dummy mail: dummymail://
]FIG]
[11] [CITE@en[seamusabshere/database_url: Convert back and forth between Heroku-style ENV'''[''''DATABASE_URL'''']''' and Rails/ActiveRecord-style config/database.yml hashes.]]
([TIME[2016-11-17 22:59:11 +09:00]])
<https://github.com/seamusabshere/database_url>
[FIG(quote)[
[FIGCAPTION[
[12] [CITE@en[Riding Rails: Rails 4.1.0: Spring, Variants, Enums, Mailer previews, secrets.yml]]
([TIME[2016-11-15 19:24:16 +09:00]])
<http://weblog.rubyonrails.org/2014/4/8/Rails-4-1/>
]FIGCAPTION]
> Second is that we’ve added support for database URLs in database.yml, and that we by default will be referring to ENV-backed URLs in the generated files.
]FIG]
[13] [CITE@en-us[John Griffin: Rails 4.1: Database URLs]]
([[John Griffin]]著, [TIME[2015-02-16 04:36:58 +09:00]])
<http://www.johng.co.uk/2014/04/29/rails-41-database-urls/>
[FIG(quote)[
[FIGCAPTION[
[15] [CITE@en[Environment Variables - GitLab Documentation]]
([TIME[2016-11-17 23:03:20 +09:00]])
<https://docs.gitlab.com/ce/administration/environment_variables.html>
]FIGCAPTION]
> DATABASE_URL string The database URL; is of the form: postgresql://localhost/blog_development
]FIG]
[FIG(quote)[
[FIGCAPTION[
[16] [CITE@en[Environment Variables - GitLab Documentation]]
([TIME[2016-11-17 23:03:20 +09:00]])
<https://docs.gitlab.com/ce/administration/environment_variables.html>
]FIGCAPTION]
> The recommended way of specifying your database connection information is to set the DATABASE_URL environment variable. This variable only holds connection information (adapter, database, username, password, host and port), but not behavior information (encoding, pool). If you don't want to use DATABASE_URL and/or want to set database behavior information, you will have to either:
> copy our template file: cp config/database.yml.env config/database.yml, or
> set a value for some GITLAB_DATABASE_XXX variables
]FIG]