19

SQLite で標準偏差関数が必要です。ここで見つけました:

http://www.sqlite.org/contrib?orderby=date

ただし、SQLite の拡張ファイルの一部です。これらのいずれかを以前にインストールしたことがなく、方法がわかりません。http://www.sqlite.org/lang_corefunc.htmlでこの既存の関数load_extensionを見つけましたが、パラメーター X と Y が何であるかわかりません。

基本的に、アグリゲート拡張ファイルのインストール方法を順を追って説明してくれる人が必要です。誰でもこれを行うことができますか?

4

2 に答える 2

20

SQLite拡張機能は、動的にリンクされたライブラリです。ここにいくつかの例があります(これはリポジトリです。ハイパーリンクを有効にするには、[ログイン/キャプチャの入力]をクリックしてください)。たとえば、md5.cを参照してください。

  • load_extensionSQLite(プラグマIIRC)で有効にする必要があります
  • 最初の引数としてライブラリのパスが必要です
  • 2番目の引数は、エントリポイント関数の名前です(md5.cではsqlite3_extension_init)。そのプロトタイプはである必要がありますint(sqlite3*, char **, const sqlite3_api_routines *)
  • SQLでは、試してみるSELECT load_extension('md5.so', 'sqlite3_extension_init');か、単純にSELECT load_extension('md5.so');

あなたはコンパイルを試みることができますmd5.c、そしてsqliteシェルから使用します.load md5.so

于 2011-11-30T08:05:52.147 に答える
6

loadext.htmlに従うことができます:

  1. .c拡張機能のファイルをダウンロードする
  2. loadext.csv.cのセクション 3「読み込み可能な拡張機能のコンパイル」のコマンドを使用して、ファイルをローカルでコンパイルします (コンパイル エラーがある場合は、関連する SO の質問を確認してください)。
  3. sqlite3_load_extension(PATH).load PATHCLIまたはSELECT load_extension(PATH)クエリで)経由でPATHライブラリロードします。.load csv.load csv.dylib

MacOS では、次のextension-functionsようになります。

curl --location --output extension-functions.c 'https://www.sqlite.org/contrib/download/extension-functions.c?get=25'
gcc -g -fPIC -dynamiclib extension-functions.c -o extension-functions.dylib

拡張機能のテスト:

SELECT load_extension("extension-functions");
CREATE TABLE test(x REAL);
INSERT INTO test (x) VALUES
  (1),
  (2),
  (3),
  (4),
  (5);
SELECT stdev(x) FROM test;

期待される出力:1.58113883008419

また、sqlite.org の Larry Brasfield は、コンパイルされたライブラリをどこに配置して、システム全体でアクセスできるようにするかについて説明しています。

.load コマンド、sqlite3_load_extension() 呼び出し、または SQL からの load_extension() SQLite 関数に絶対パスを指定すると (拡張機能の読み込みが有効な場合)、そのパスで指定された拡張機能が読み込まれます (できます。)

絶対パスを使用せずにいずれかのロード メカニズムの拡張機能に名前を付ける場合は、dlopen(...) が実行する検索によってコンパイル済みの拡張機能を見つけることができるようにする必要があります。異なる場合がありますが、通常は、環境変数 LD_LIBRARY_PATH で指定されたディレクトリを、コロンで区切られた値が左から右へ、次に /lib と /usr/lib の順に調べます。

そのため、既に検索されている場所に拡張機能を配置するか、"env" コマンドを使用して、拡張機能を配置した場所を含む $LD_LIBRARY_PATH の値を変更して SQLite CLI を起動することができます。または、CLI を使用しているセッションの環境変数を単純に変更することもできます。(これは微妙な問題につながる可能性があるため、潜在的な影響を理解するようにしてください。)

于 2020-05-22T00:15:16.040 に答える