2016-08-27 2 views
1

ジオスペース機能がビューに含まれていると、MySQL上のビューを作成すると無効な関数名が生成されるようです(MySQLはAmazon EC2/Amazon Linux上で実行されています)。MySQL Create Viewが地理空間関数名を破壊するのを防ぐには?

問題は、st_pointが有効なMySQL関数ではないことが明らかです。

mysql> select st_point(1,1); 
ERROR 1305 (42000): FUNCTION wordpress.st_point does not exist 

質問はなぜ起こるのですか。それをどうやって止めるのですか?

次は、この問題が発生しているコンピュータにインストールされているパッケージの一覧です。

sudo yum list installed | grep mysql 
mysql-config.x86_64     5.5.51-1.11.amzn1   @amzn-updates 
mysql56.x86_64      5.6.32-1.16.amzn1   @amzn-updates 
mysql56-common.x86_64     5.6.32-1.16.amzn1   @amzn-updates 
mysql56-devel.x86_64     5.6.32-1.16.amzn1   @amzn-updates 
mysql56-embedded.x86_64    5.6.32-1.16.amzn1   @amzn-updates 
mysql56-errmsg.x86_64     5.6.32-1.16.amzn1   @amzn-updates 
mysql56-libs.x86_64     5.6.32-1.16.amzn1   @amzn-updates 
mysql56-server.x86_64     5.6.32-1.16.amzn1   @amzn-updates 
php70-mysqlnd.x86_64     7.0.9-1.14.amzn1    @amzn-updates 

古いMySQLのパッケージと同様のコンピュータでは、この問題を示さない - しかし、私は新しい地理空間機能にアクセスするためのMySQLの新しいバージョンを必要としています。

古いコンピュータで同じテスト。

mysql> create view test as select point(1,1); 
Query OK, 0 rows affected (0.00 sec) 

mysql> select * from test; 
+---------------------------+ 
| point(1,1)    | 
+---------------------------+ 
|    ??  ?? | 
+---------------------------+ 
1 row in set (0.00 sec) 

mysql> show create view test; 
+------+-----------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ 
| View | Create View                             | character_set_client | collation_connection | 
+------+-----------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ 
| test | CREATE ALGORITHM=UNDEFINED DEFINER=`eric`@`localhost` SQL SECURITY DEFINER VIEW `test` AS select point(1,1) AS `point(1,1)` | utf8     | utf8_general_ci  | 
+------+-----------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ 
1 row in set (0.00 sec) 

mysql> drop view test; 
Query OK, 0 rows affected (0.00 sec) 

古いコンピュータのパッケージ。

sudo yum list installed | grep mysql; 
mysql.noarch       5.5-1.6.amzn1    @amzn-main 
mysql-config.x86_64     5.5.51-1.11.amzn1   @amzn-updates 
mysql-devel.noarch     5.5-1.6.amzn1    @amzn-main 
mysql-server.noarch     5.5-1.6.amzn1    @amzn-main 
mysql55.x86_64      5.5.51-1.11.amzn1   @amzn-updates 
mysql55-devel.x86_64     5.5.51-1.11.amzn1   @amzn-updates 
mysql55-libs.x86_64     5.5.51-1.11.amzn1   @amzn-updates 
mysql55-server.x86_64     5.5.51-1.11.amzn1   @amzn-updates 
php-mysql.x86_64      5.3.29-1.8.amzn1    @amzn-updates 

何が欠けていますか?

UPDATE:@Michaelは5.6.27のようGeomFromText作品を述べたように、この問題は、MySQLバージョン5.6.10+

+0

それを5.6(これはおそらく 'sql/item_geofunc.h'にあります)でこれを突破したようです。考えられる回避策は 'GeomFromText()'を使うことです: 'CREATE VIEW v1 AS SELECT GeomFromText( 'POINT(1 1)')AS my_point;'これは正しく動作し、 'X()'と 'Y()'関数がビューの結果から内側の値を正しく抽出するという事実から明らかなように、 'POINT'を返します。 –

答えて

0

うんのバグとしてverifiedてきました。

あなたがPoint()に緯度/経度の列を補間する必要がある場合:

CREATE OR REPLACE VIEW `vw_some_table` AS 
    SELECT 
    id, 
    name, 
    lat, 
    lng, 
    status, 
    GeomFromText(concat('point(',lng,' ', lat,')')) 
    FROM vw_some_table; 

注連結の使用。

または

あなたの例のように:

CREATE OR REPLACE VIEW `vw_some_table` AS 
    SELECT 
    id, 
    name, 
    lat, 
    lng, 
    status, 
    GeomFromText('point(1 1') 
    FROM vw_some_table; 

彼らはまだかかわらず、それを5.7.xでの作業...など重大なバグを修正していない非常に驚い

https://dev.mysql.com/doc/refman/5.6/en/gis-point-property-functions.html

関連する問題