2013年12月31日星期二

一個MySQL DBA著眼於PostgreSQL的

Original post: http://anothermysqldba.blogspot.com/2013/12/a-mysql-dba-looks-at-postgresql.html

所以這是/一之旅的MySQL DBA尋找到的PostgreSQL 。 這不是一個攻擊只是觀察和例子。 

使用的CentOS 6.5 64位: 

RPM-IVH http://yum.postgresql.org/9.3/redhat/rhel-6.5-x86_64/pgdg-centos93-9.3-1.noarch.rpm

百勝groupinstall“PostgreSQL數據庫服務器9.3 PGDG” 
--->包裝postgresql93.x86_64 0:9.3.2-1PGDG。RHEL6將安裝 
--->包裝postgresql93-contrib.x86_64 0:9.3.2-1PGDG。RHEL6將安裝 
--->包裝postgresql93-libs.x86_64 0:9.3.2-1PGDG。RHEL6將安裝 
 
--->包裝postgresql93-server.x86_64 0:9.3.2-1PGDG。RHEL6將安裝 

yum的安裝postgresql93服務器 

服務的PostgreSQL-9.3初始化數據庫 
初始化數據庫:[ 確定 ] 
服務的PostgreSQL-9.3啟動 
啟動PostgreSQL的-9.3服務:[ 確定 ] 
在chkconfig的postgresql-9.3 

下面所有的例子都是基於PostgreSQL的維基 
#蘇- Postgres的 
-bash的-4.1 $ psql的 
 
psql的(9.3.2) 

Postgres的=#CREATE USER testuser的密碼'1234'; 
CREATE ROLE 
Postgres的=#GRANT ALL ON SCHEMA測試,以testuser的; 
GRANT 

Postgres的=#GRANT ALL ON架構中測試,以testuser的所有表; 
GRANT 
Postgres的=#\ q
-bash的-4.1 $退出
註銷
#蘇testuser的

$ PWD 
/首頁/ testuser的 
$ psql的-D Postgres的 
psql的(9.3.2) 

鍵入“help”以獲得幫助。 
Postgres的=> CREATE TABLE test.test(COLTEST為varchar(20));
CREATE TABLE
Postgres的=>插入test.test(COLTEST)VALUES('它的工作原理!');
INSERT 0 1
Postgres的=> SELECT * FROM test.test;
COLTEST
-----------
它的工作原理!
(1行)

Postgres的=> DROP TABLE test.test;
DROP TABLE
Postgres的=>

我也注意到,這些GRANT語句9.3運作良好,但最初的發行版安裝了一個8 *版本和一些命令失敗。 

順便說一句......你當然還有功能,你會期望從一個穩定的RDBM系統。 誠然這些都是很簡單的例子。 

Postgres的=> EXPLAIN SELECT * FROM test.test; 
查詢計劃 
-------------------------------------------------- ------ 
序列掃描測試上(成本= 0.00 .. 19.20行= 920寬度= 58) 

顯示數據庫== \升 
Postgres的- > \升 
Postgres的| Postgres的| UTF8 |的en_US.UTF-8 |的en_US.UTF-8 | 
template0中| Postgres的| UTF8 |的en_US.UTF-8 |的en_US.UTF-8 | = C / Postgres的+ 
| | | | | Postgres的= CTC / Postgres的 
的template1 | postgres的| UTF8 |的en_US.UTF-8 |的en_US.UTF-8 | = C / Postgres的+ 

| | | | | Postgres的= CTC / Postgres的 

使用的是標準的SQL: 
Postgres的- >使用Postgres的 

列出所有模式: 

Postgres的- > \ DN 
公眾| Postgres的 

測試| Postgres的 

SHOW CREATE TABLE等是更多一點的工作。 授予一個MySQL DBA會看到它作為,因為我們是用來做更多的工作。PostgreSQL使用表空間超過MySQL用戶是用來做什麼。

  Postgres的=> CREATE TABLE sometable(somefield數據類型為varchar(255),anotherfield為varchar(150),DateField的日期); 
  CREATE TABLE 
  Postgres的=> INSERT INTO sometable(somefield,anotherfield,的DateField)VALUES('FUBAR','rabuf','2013-12-30'); 
  INSERT 0 1 
  Postgres的=> INSERT INTO sometable(somefield,anotherfield,的DateField)VALUES('FUBAR','rabuf',NOW()); 
  INSERT 0 1 
  Postgres的=> INSERT INTO sometable(somefield,anotherfield,的DateField)VALUES('fubar2','rabuf2',NOW()); 
  INSERT 0 1 
  Postgres的=>從sometable選擇*; 
   somefield | anotherfield |的DateField   
  ----------- + -------------- + ------------ 
   FUBAR | rabuf | 2013-12-30 
   FUBAR | rabuf | 2013-12-30 
   fubar2 | rabuf2 | 2013-12-30 
  (3行) 

Postgres的=> SELECT * FROM sometable WHERE somefield ='FUBAR'; somefield | anotherfield |的DateField ----------- + -------------- + ---- -------- FUBAR | rabuf | 2013-12-30 FUBAR | rabuf | 2013-12-30(2排)

Postgres的=> \? < -幫助將告訴您如何來瀏覽周圍。

顯示表== \ DT

Postgres的=> \ DT
關係一覽表
架構|名稱|型號|業主
-------- + ----------- + -------- + ----------
公共| sometable |表| TESTUSER

Postgres的=> ALTER TABLE sometable ADD COLUMN intfield的int [11]; ALTER TABLE

Postgres的=> SELECT * FROM sometable; somefield | anotherfield |的DateField | intfield ----------- + -------------- + -------- ---- + ---------- FUBAR | rabuf | 2013-12-30 | FUBAR | rabuf | 2013-12-30 | fubar2 | rabuf2 | 2013-12-30 |(3行)

SHOW CREATE TABLE == \ D +表名
Postgres的=> \ D + sometable
表“public.sometable”
專欄|類型|修飾語|存儲|統計指標|說明
-------------- + ------------------------ + ---------- - + ---------- + -------------- + -------------
somefield |字符改變(255)| |擴展| |
anotherfield |字符改變(150)| |擴展| |
的DateField |日期| |平原| |
intfield |整數[] | |擴展| |
擁有的OID:無


為了幫助更多的可以安裝pgAdmin的
yum的安裝pgadmin3_93

如果這能夠工作,它是如何工作可能是另一種整個博客文章。

到目前為止.... 我會堅持與MySQL但這是使用PostgreSQL的只是一個簡單的例子。 這可以讓你開始你可以評估自己。

下面有用的鏈接。 請參考這些,因為他們有更多的經驗與PostgreSQL的比我好。

2013年12月7日星期六

ERROR 1356(HY000)

Original post: http://anothermysqldba.blogspot.com/2013/12/error-1356-hy000.html

後一個錯誤來時要了解的最重要的事情是要花點時間和放鬆。 
有時,人們遇到一個錯誤運行,並成為慌亂和沮喪。 深呼吸和放鬆。 有時候,“ 瘋狂就像重力。所有這一切需要的是輕輕一推 “和” 有時,問題是複雜的,答案很簡單 。“ 

這是什麼一回事呢? 嗯比如我最近被要求幫助解決了困擾其它DBA的一個問題。 在尊重各沒什麼意思了DBA,但在匆忙的人只是被忽視的 答案 就是在他們面前的,而是螺旋式下降到 瘋狂  

下面是這種情況的一般概念。 

做一個數據庫的mysqldump在用戶移動到另一個數據庫為他人被測試。 導入工作就好了。 但是,用戶開始發現錯誤,當他們試圖從一個預先構建的視圖來查詢。 

的mysql> SELECT * FROM <View_name>限制1; 

ERROR 1356(HY000):查看'。<DB_NAME>的<Viewname>'引用了無效的表(S)或列(S)或函數(S)或視圖缺乏權利定義者/調用者使用它們 

第一反應是假設出事了與進口。 做了視圖或實際的相關表被損壞? 

 

為了解決這個錯誤的第一件事待辦事項是:MySQL的>顯示創建視圖<View_Name> \ G 

你可能會看到的東西,是這樣開始的: 
*************************** 1。 排*************************** 
查看:訪問者 
 
創建視圖:CREATE ALGORITHM = UNDEFINED DEFINER =`<Some_user>`@`<Some_host_or_IP>`SQL SECURITY DEFINER查看 

當你看到誰定義者是:`<Some_user>`@`<Some_host_or_IP>` 您可以查看贈款該用戶。 

MySQL的>展會補助`<Some_user>`@`<Some_host_or_IP>`; 

原來,該解決方案是擺在首位的錯誤只是說什麼:“ 來看缺乏權利定義者/調用者使用它們  

為了方便您可以在那裡已經工作了數據庫做一個節目的贈款和複製GRANT語句,或者你可以查看什麼類型的權限,你需要在新的數據庫來實現,以使視圖來收集所需的數據。 

為用戶和權限錯誤的一個簡單的更新不見了。 

 有時候,答案很簡單 。“